Domanda

Sto imparando Lisp ad espandere i miei orizzonti perché ho sentito che è usato nella programmazione AI. Dopo aver fatto qualche esplorazione, devo ancora trovare esempi di intelligenza artificiale o qualsiasi altra cosa nella lingua che la renderebbe più incline verso di essa.

Lisp è stato usato in passato perché era disponibile o c'è qualcosa che mi manca?

È stato utile?

Soluzione

Lisp era usato nell'intelligenza artificiale fino alla fine degli anni '80. Negli anni '80, tuttavia, Common Lisp fu venduto al mondo degli affari come il "linguaggio AI"; il contraccolpo ha costretto la maggior parte dei programmatori AI a C ++ per alcuni anni. In questi giorni, i prototipi di solito sono scritti in un linguaggio dinamico più giovane (Perl, Python, Ruby, ecc.) E le implementazioni di ricerche di successo sono in genere in C o C ++ (a volte Java).

Se sei curioso degli anni '70 ... beh, non ero lì. Ma penso che Lisp abbia avuto successo nella ricerca sull'IA per tre motivi (in ordine di importanza):

  1. Lisp è un eccellente strumento di prototipazione. È stato il migliore per molto tempo. Lisp è ancora bravo ad affrontare un problema che non sai ancora come risolvere. Questa descrizione caratterizza perfettamente l'intelligenza artificiale.
  2. Lisp supporta bene la programmazione simbolica. Anche la vecchia IA era simbolica. È stato anche unico in questo senso per molto tempo.
  3. Lisp è molto potente. La distinzione codice / dati è più debole, quindi sembra più estensibile rispetto ad altre lingue perché le funzioni e le macro sembrano roba incorporata.

Non ho il vecchio libro AI di Peter Norvig , ma dovrebbe essere un buon modo per imparare a programmare algoritmi AI in Lisp.

Disclaimer: sono uno studente laureato in linguistica computazionale. Conosco il sottocampo dell'elaborazione del linguaggio naturale molto meglio degli altri campi. Forse Lisp è usato di più in altri sottocampi.

Altri suggerimenti

Lisp è usato per l'IA perché supporta l'implementazione di software che calcola molto bene i simboli. Simboli, espressioni simboliche e calcolo con quelli sono al centro di Lisp.

Le tipiche aree di intelligenza artificiale per il calcolo con simboli erano / sono: algebra del computer, dimostrazione di teoremi, sistemi di pianificazione, diagnosi, sistemi di riscrittura, rappresentazione e ragionamento delle conoscenze, linguaggi logici, traduzione automatica, sistemi esperti e altro.

Non sorprende quindi che molte famose applicazioni AI in questi domini siano state scritte in Lisp:

  • Macsyma come il primo sistema di algebra per computer di grandi dimensioni.
  • ACL2 come proveratore di teoremi ampiamente usato, ad esempio usato da AMD.
  • DART come pianificatore logistico utilizzato durante la prima guerra del Golfo dai militari statunitensi. Si dice che questa sola applicazione Lisp abbia rimborsato tutti gli investimenti statunitensi nella ricerca sull'IA in quel momento.
  • SPIKE, l'applicazione di pianificazione e programmazione per il telescopio spaziale Hubble. Utilizzato anche da molti altri grandi telescopi.
  • CYC, uno dei più grandi sistemi software scritti. Rappresentazione e ragionamento nel campo della conoscenza del senso comune umano.
  • METAL, uno dei primi sistemi di traduzione in linguaggio naturale utilizzati commercialmente.
  • Assistente all'autorizzazione di American Express, che controlla le transazioni con carta di credito.

Ci sono migliaia di applicazioni in queste aree che sono scritte in Lisp. Molto comune per quelli è che hanno bisogno di capacità speciali nell'area dell'elaborazione simbolica. Uno implementa linguaggi speciali che hanno interpreti / compilatori speciali in questi domini su Lisp. Lisp consente di creare rappresentazioni di dati e programmi simbolici e può implementare tutti i tipi di macchinari per manipolare queste espressioni (formule matematiche, formule logiche, piani, ...).

(Si noti che anche molti altri linguaggi di programmazione per scopi generici sono usati nell'intelligenza artificiale. Ho cercato di rispondere al motivo per cui soprattutto Lisp è usato nell'intelligenza artificiale.)

Uno dei motivi è che ti consente di estendere la lingua con costrutti specifici per il tuo dominio, rendendolo, in effetti, una lingua specifica del dominio. Questa tecnica è incredibilmente potente in quanto ti consente di ragionare sul problema che stai risolvendo, piuttosto che sul mescolare i bit.

La mia ipotesi è sempre stata che, essendo un linguaggio funzionale, non fa distinzione tra codice e dati. Tutto, comprese le definizioni delle funzioni e le chiamate delle funzioni, possono essere trattati come elenchi e modificati come qualsiasi altro dato.

Quindi il codice auto-ispezionato e auto-modificante potrebbe essere scritto facilmente.

Una possibile risposta è che l'IA è una raccolta di problemi molto difficili e Lisp è un buon linguaggio per risolvere problemi difficili, non solo l'IA.

Perché: macro, funzioni generiche e ricca introspezione consentono un codice conciso e una facile introduzione delle astrazioni del dominio & # 8212; è una lingua che puoi rendere più potente. Per molti problemi non è necessario e ha i suoi costi, ma per altri problemi è necessaria la potenza per fare progressi.

Penso che sia sbagliato pensarci solo in termini di IA. Cose come l'inverno AI e gli effetti commerciali sul lisp comune sono fonte di distrazione se ti stai chiedendo perché è stato utilizzato per l'IA, non perché non viene spesso usato ora ...

Comunque, penso sia perché la maggior parte del codice AI era essenzialmente un codice di ricerca. Lisp è un linguaggio eccezionale per la programmazione esplorativa, per l'implementazione di algoritmi difficili, per il codice automodificante e spesso modificato. In altre parole, per il codice di ricerca.

Uso lisp oggi per alcuni dei miei codici di ricerca (matematica, elaborazione del segnale) perché è più flessibile e potente della maggior parte delle lingue e genera codice più efficiente della maggior parte delle lingue. In genere riesco a ottenere prestazioni entro un fattore di +/- 2 rispetto alla velocità c ++, ma posso implementare le cose molto più velocemente e gestire la complessità che mi richiederebbe molto più tempo rispetto a me se usassi c ++, java, c #.

Questo è vagare fuori tema però. Penso che il codice AI sia stato scritto principalmente in lisp comune per un po 'perché è un approccio potente al codice di ricerca. Lo è ancora; ma man mano che gli algoritmi `` AI '' venivano meglio compresi ed esplorati, parti di essi erano molto più facili da insegnare e usare, quindi si presentavano in lingue dell'anno in corsi universitari. Da lì, diventa un problema di ciò che le persone già sanno, quali librerie sono disponibili e cosa funziona bene per grandi gruppi.

Immagino che un grande motivo sia la flessibilità delle liste come struttura di dati di base.

all'epoca, potendo trasformarli in tutti i tipi di oggetti compositi e cose nuove come passaggi di messaggi e polimorfismo, ne fecero il linguaggio di scelta; non specificamente per l'IA, ma per compiti grandi, complessi. specialmente quando stavano sperimentando concetti.

Penso che tu abbia ragione: Lisp era uno strumento utile per hackerare le cose. Questo perché non distingueva molto tra programma e dati. Ciò ha permesso agli hacker di manipolare le funzioni molto facilmente, proprio come i dati.

Ma lisp è abbastanza difficile da leggere per gli umani, con i suoi sostegni e la non distinzione tra dati e programma. Oggi non userò lisp per nessun codice AI di produzione (o forse nemmeno per la prototipazione) ma preferirei di gran lunga Python per gli script.

Un'altra cosa da considerare sono le librerie / strumenti esistenti in / relativi alla lingua. Non sono in grado di confrontare le librerie lisp con le librerie Python, ma immagino che le librerie e l'open source contino molto di più ora rispetto a prima.

Questa risposta è stata ispirata dal seguente confronto tra lisp e python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html

Ricordo di aver sentito che, essendo un linguaggio funzionale, Lisp era un'ottima scelta per implementare algoritmi ricorsivi. Essere in grado di rintracciare un albero e tornare indietro è essenziale quando si considerano i processi decisionali (attraversamento) e il risultato finale (nodo foglia).

Questo mi è stato detto durante un corso di AI all'università dove abbiamo studiato Lisp.

Una risposta più cinica potrebbe essere "perché perse una guerra di intelligenza artificiale tra Giappone e Stati Uniti negli anni '80". C'è un divertente post sul blog che specula sull'impatto della quinta generazione Decesso del sistema informatico sul Prolog .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top