Sembra esserci una convinzione di lunga data (principalmente da parte dei non lispers) che lisp sia migliore della maggior parte delle lingue dell'IA.
Da dove proviene questa convinzione? E c'è qualche base in effetti ad esso?
Sembra esserci una convinzione di lunga data (principalmente da parte dei non lispers) che lisp sia migliore della maggior parte delle lingue dell'IA.
Da dove proviene questa convinzione? E c'è qualche base in effetti ad esso?
Risposte:
Una delle differenze chiave tra lingue simili a LISP e altre lingue è che in LISP, codice e dati sono la stessa cosa. Ciò rende possibile fare cose come far modificare un programma ad alcuni dei suoi algoritmi durante il runtime mentre "impara" cose nuove, come parte nativa della lingua.
Un altro aspetto che affronta questo argomento, sebbene non tanto, è la capacità di LISP di aggiungere facilmente nuove semantiche linguistiche attraverso le macro. Ciò rende possibile entrare e definire un DSL con cui la tua intelligenza artificiale funziona e in cui può evolversi, con il potenziale per quella lingua di crescere, correggersi e evolversi mentre l'IA è in esecuzione.
In accordo con Quadrescence, la storia di utilizzo di LISP fa molto strada verso l'immagine di LISP che fa bene all'intelligenza artificiale. Perché LISP viene utilizzato per l'IA copre la storia in modo molto più dettagliato.
Alcuni dei primissimi programmi in lisp erano dimostratori di teoremi, matematica simbolica, il classico ELIZA, ecc. Oltre a libri come il PAIP di Peter Norvig, così come il fatto che lisp abbia origine nel laboratorio AI del MIT, ha ottenuto quell'immagine quel lisp fa bene all'intelligenza artificiale.
DARPA ha anche finanziato le università per la ricerca sull'intelligenza artificiale e ha acquistato notevoli quantità di hardware da Symbolics. La carenza di fondi alla fine ha portato al cosiddetto "inverno AI".
Infine, le lingue originali come Fortran (o "lingue" come ASM) sono state utilizzate principalmente per il calcolo numerico. Hai lavorato con numeri e matrici di essi. In questi giorni abbiamo simboli, o la capacità di creare quasi qualsiasi oggetto che vorremmo, nella maggior parte delle lingue moderne.
Quindi, il motivo per cui lisp era meglio per l'IA in una volta non è più il caso. Tuttavia, l'idea che "lisp sia un bene per l'IA" è ancora persistente.
Il fatto che lisp sia o meno un linguaggio migliore a causa delle sue caratteristiche e struttura è un altro caso (dal momento che questo genere di cose si applica a molte altre aree oltre alla semplice IA e di solito vi condurrà alla vecchia guerra delle fiamme).
Diamo un'occhiata ad alcuni dei programmi AI attuali: (1) Robot, ad es. Auto a guida autonoma. Nella grande sfida DARPA, il software di guida automobilistica superiore non era Lisp. Piuttosto era un linguaggio procedurale come C ++ o Java. (2) Traduzione automatica del linguaggio naturale. Lisp non è utilizzato a questo scopo da sistemi di produzione ampiamente utilizzati. (3) Gioco, ad es. Programmi di scacchi. Lisp non è utilizzato a questo scopo da programmi di scacchi superiori ampiamente utilizzati come Fritz.
Lisp è stato inventato e sviluppato dai laboratori di intelligenza artificiale degli Stati Uniti negli anni '60 al fine di prototipare rapidamente programmi logici simbolici in cui le strutture di dati nativi di Lisp si adattano al livello di astrazione simbolica richiesta - ad esempio, le parole inglesi potrebbero essere simboli in un elenco, le formule logiche potrebbero essere facilmente rappresentato come elenchi di operatori e operandi.
Ma per i programmi di produzione, i vantaggi di ingegneria del software dei linguaggi tipizzati statici e una vasta gamma di librerie di terze parti, significa che Lisp non è nemmeno considerato per i grandi sistemi moderni che eseguono attività di intelligenza artificiale.
@Stephen Reed l'ha detto molto bene. Posso solo aggiungere che ero nel MIT AI Lab negli anni '70. Ho sentito una storia sull'origine di Lisp. Non posso giurare che è vero, ma va così:
John McCarthy era al MIT negli anni '50 e aveva lavorato per dimostrare le proprietà dei programmi, e per questo aveva usato una semplice sintassi simile a Lambda Calculus.
La storia era che uno degli studenti universitari voleva fare un progetto (analogia, dimostrazione di teoremi o matematica simbolica, non ricordo quale) e chiese a McCarthy quale linguaggio usare. La risposta - Fortran ovviamente. (Non c'era molto altro, e l'elaborazione dell'elenco stesso era abbastanza ben nota allora, ma solo come pacchetti di subroutine, non come lingue.) Beh, in qualche modo ciò ha portato a un programma che avrebbe elaborato simboli in strutture di elenco nidificate. Insieme a un modo per leggerli e stamparli, e poi una eval
funzione, e Voila '- una lingua. Un linguaggio di elaborazione ELENCO. È decollato da lì.
Per il tipo di algoritmi che stavamo facendo in quei giorni (e che ancora poche persone stanno facendo) era necessario un linguaggio che potesse facilmente manipolare le espressioni simboliche. Questo è ciò in cui Lisp era bravo. Ci sono state molte variazioni sul concetto di base, andando con nomi diversi, come Prolog, Scheme, ecc. Ecc.
Quindi l'intelligenza artificiale significa molte cose per molte persone e lingue diverse sono buone per cose diverse, ma per problemi che potrebbero essere descritti come manipolazione di simboli, è difficile trovare un linguaggio utile che in qualche modo non discenda da Lisp.
Lisp ha dei vantaggi per i tipi di cose che erano chiamate AI - almeno la logica, la ricerca e l'analisi di cose correlate che erano la maggior parte dell'IA fino agli anni '90 circa.
Un grande vantaggio di Lisp è il supporto per le macro: codice come dati, metaprogrammazione.
Standard ML (SML) è un'altra lingua che è stata ampiamente utilizzata nell'intelligenza artificiale, ad esempio, dagli anni '80. Gli obiettivi CAML e F # sono evoluzioni di SML.
Un grande vantaggio della famiglia ML (e Haskell, ecc.) È la corrispondenza dei modelli. Questo è probabilmente disponibile anche in Lisp, ma tramite una libreria di metaprogrammazione anziché integrata nel linguaggio. È disponibile anche in Haskell, ma almeno per il momento, la corrispondenza dei modelli non è comune al di fuori dei linguaggi di programmazione funzionale.
Ho visto affermazioni che LISP è fondamentalmente un calcolo lambda non tipizzato esteso e ML è sostanzialmente un calcolo lambda tipizzato esteso. Non ho la conoscenza del calcolo lambda tipizzato da dire con certezza.
L'intelligenza artificiale è diventata anche una materia molto più ampia nel corso degli anni, al punto che è quasi completamente svanita. Il data mining potrebbe essere considerato un sottocampo dell'IA. Molte cose AI (OCR, riconoscimento vocale) hanno quasi smesso di essere AI - sono solo applicazioni, le stesse di qualsiasi altra. E l'IA è molto più dipendente dall'elaborazione del segnale e da altri tipi di crunching dei numeri di quanto non fosse una volta.
Per l'OCR e il riconoscimento vocale, l'intelligenza artificiale dipendeva sempre dall'elaborazione del segnale e ovviamente dallo scricchiolio dei numeri. Sì, ci sono alcune contraddizioni in questo ;-) Non posso dare i pesi per le cose perché non lo so davvero.
Ad ogni modo, di conseguenza, probabilmente non esiste un unico linguaggio appropriato nemmeno per l'intera moderna applicazione AI - Immagino (nessuna conoscenza di prima mano) che ci sia molto sviluppo multi-lingua nell'IA moderna. E posso quasi garantire che troverai C e C ++ in alcuni progetti, per ottenere il numero di prestazioni crunch. Non sarei sorpreso se ci fosse un sacco di Python per ragioni simili - con una buona libreria numerica, Python è in grado di gestire facilmente compiti di analisi del numero.
In una di quelle auto a guida autonoma, immagino che il sistema di visione sia scritto in una lingua diversa (e gira su hardware diverso) al sistema di pianificazione del percorso.