Sembra esserci una convinzione di vecchia data (principalmente da non-lispers) che il lisp è migliore della maggior parte delle lingue in AI.
Da dove nasce questa convinzione? E c'è qualche base di fatto per questo?
Una delle principali differenze tra linguaggi simili a LISP e altre lingue è che nei LISP, codice e dati sono la stessa cosa. Ciò rende possibile fare cose come avere un programma che modifica alcuni dei suoi algoritmi durante il runtime poiché "impara" cose nuove, come parte nativa della lingua.
Un altro aspetto che entra in questo, anche se non tanto, è la capacità di LISP di aggiungere facilmente nuova semantica del linguaggio attraverso i macro. In questo modo è possibile entrare e definire una DSL con cui la tua intelligenza artificiale interagisce e può evolversi, con la possibilità che il linguaggio cresca, si corregga automaticamente e si evolva mentre l'intelligenza artificiale è in esecuzione.
Accettando con Quadrescence, la storia d'uso di LISP è molto importante per l'immagine di LISP che è positiva per l'intelligenza artificiale. Perché il LISP è utilizzato per l'IA tratta la storia in modo molto più dettagliato.
Alcuni dei primissimi programmi in lisp erano teorici, matematica simbolica, ELIZA classico, ecc. Oltre a libri come il PAIP di Peter Norvig, oltre al fatto che il lisp ha origine nel laboratorio del MIT AI, è una sorta di ho ottenuto quell'immagine che il lisp è buono per l'intelligenza artificiale.
DARPA ha anche finanziato università per la ricerca in intelligenza artificiale e acquistato una quantità significativa di hardware da Symbolics. La carenza di fondi alla fine ha portato al cosiddetto "inverno AI".
Infine, i linguaggi originali come Fortran (o "lingue" come ASM) sono stati usati principalmente per il calcolo numerico. Hai lavorato con numeri e array di loro. In questi giorni abbiamo simboli, o la possibilità di creare quasi tutti gli oggetti che vorremmo, nella maggior parte delle lingue moderne.
Quindi, il motivo per cui la lisp era migliore per l'intelligenza artificiale in una volta non è più il caso. Tuttavia, l'idea che "il lisp è buono per l'intelligenza artificiale" è ancora presente.
Indipendentemente dal fatto che il lisp sia un linguaggio migliore a causa delle sue caratteristiche e della sua struttura è completamente un altro caso (poiché in realtà questo tipo di cose si applica a molte altre aree oltre all'IA, e di solito porterà a una guerra ardente).
Diamo un'occhiata ad alcuni dei programmi IA attuali: (1) robot, ad es. auto a guida autonoma. Nella grande sfida DARPA, il software di guida automobilistica superiore non era Lisp. Piuttosto si trattava di un linguaggio procedurale come C ++ o Java. (2) traduzione automatica di linguaggio naturale. Lisp non viene utilizzato a tale scopo da sistemi di produzione ampiamente utilizzati. (3) Gioco, ad es. programmi di scacchi. Il Lisp non è usato per questo scopo da programmi di scacchi ampiamente usati, come Fritz.
Lisp è stato inventato e sviluppato dai laboratori di intelligenza artificiale degli Stati Uniti negli anni '60 al fine di prototipare rapidamente i programmi di logica simbolica in cui le strutture dati native di Lisp si adattano al livello di astrazione simbolica richiesta - ad es. Le parole inglesi potrebbero essere simboli in un elenco, le formule logiche potrebbero essere facilmente rappresentate come elenchi di operatori e operandi.
Ma per i programmi di produzione, i vantaggi dell'ingegneria del software dei linguaggi tipizzati statici e una vasta gamma di librerie di terze parti, significa che il Lisp non è nemmeno considerato per i grandi sistemi moderni che eseguono attività AI.
@Stephen Reed lo 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 sia 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 al Lambda Calculus.
La storia era che uno degli studenti universitari desiderava fare un progetto (analogia, o dimostrazione di teoremi o matematica simbolica, non ricordo quale) e ha chiesto a McCarthy quale linguaggio usare. La risposta - Fortran, naturalmente. (Non c'era molto altro, e l'elaborazione dell'elenco in sé era abbastanza nota, ma solo come pacchetti di subroutine, non come lingue.) Beh, in qualche modo questo portò a un programma che avrebbe processato i simboli nelle strutture di liste annidate. Insieme a un modo per leggerli e stamparli, quindi una funzione eval
, e Voila '- una lingua. Una lingua di elaborazione di LISt. È 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ò che Lisp era bravo a. Ci sono state molte variazioni sul concetto di base, con nomi diversi, come Prolog, Scheme, ecc. Ecc.
Quindi l'intelligenza artificiale significa un sacco di cose per molte persone, e lingue diverse vanno bene per cose diverse, ma per problemi che potrebbero essere descritti come manipolazione di simboli, è difficile trovare un linguaggio utile che non discenda in qualche modo da Lisp.
Il Lisp ha vantaggi per i tipi di cose che sono stati chiamati AI - almeno la logica, la ricerca e l'analisi delle cose correlate che erano la maggior parte dell'IA fino agli anni '90.
Uno dei principali vantaggi di Lisp è il supporto per le macro: codice come dati, metaprogrammazione.
Standard ML (SML) è un altro linguaggio che è stato ampiamente utilizzato in AI, ad esempio, dagli anni '80. Obiettivo CAML e F # sono evoluzioni di SML.
Un importante vantaggio della famiglia ML (e Haskell, ecc.) è la corrispondenza del modello. Questo è probabilmente disponibile anche in Lisp, ma tramite una libreria di metaprogrammazione piuttosto che integrata nella lingua. È disponibile anche in Haskell, ma almeno per il momento la corrispondenza dei pattern non è comune al di fuori dei linguaggi di programmazione funzionale.
Ho visto affermare che LISP è fondamentalmente un esteso calcolo lambda non tipizzato, e ML è fondamentalmente un esteso calcolo lambda tipizzato. Non ho la conoscenza del calcolo lambda scritto per dire di sicuro.
Anche l'IA è diventata un argomento molto più ampio nel corso degli anni - al punto che è quasi completamente svanita. Il data mining potrebbe essere considerato un sottocampo di AI. Molte cose di intelligenza artificiale (OCR, riconoscimento di speach) hanno quasi smesso di essere l'intelligenza artificiale - sono solo applicazioni, come tutte le altre. E l'intelligenza artificiale dipende molto più dall'elaborazione del segnale e da altri tipi di crunch numerici di quanto non fosse una volta.
Per OCR e riconoscimento speach, l'intelligenza artificiale dipendeva sempre dall'elaborazione del segnale e dal crunch numerico. Sì, ci sono alcune contraddizioni in questo ;-) Non posso dare i pesi per le cose come non lo so.
Ad ogni modo, di conseguenza, probabilmente non esiste una sola lingua appropriata nemmeno per l'intera applicazione AI moderna - suppongo (senza una conoscenza di prima mano) che ci sia un sacco di sviluppo multi-lingua nell'IA moderna. E posso quasi garantire che troverete alcuni C e C ++ in alcuni progetti, per ottenere le prestazioni di crunch del numero. Non mi sorprenderebbe se ci fosse un sacco di Python per ragioni simili - con una buona libreria numerica, Python può facilmente gestire le attività di crimpatura dei numeri.
In una di quelle auto a guida autonoma, immagino che il sistema di visione sia scritto in una lingua diversa (e funzioni su hardware diverso) al sistema di pianificazione del percorso.
Leggi altre domande sui tag lisp artificial-intelligence myth