Esistono prove del fatto che lisp sia effettivamente migliore di altre lingue all'intelligenza artificiale? [chiuso]


21

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?


4
Il titolo chiede: Lisp è meglio di altre lingue in AI ?. La stessa domanda si pone: Lisp è cattivo in tutto tranne che nell'intelligenza artificiale ?. Queste sono domande molto diverse (si consideri lo scenario 1: Lisp è la lingua migliore per tutto, e lo scenario 2: Lisp è la lingua peggiore per tutto). Potresti voler modificare il titolo o il corpo della domanda per rendere più chiaro quale domanda stai effettivamente ponendo.
Gareth McCaughan,

9
Suppongo che se la risposta accettata provenisse da una macchina Lisp avremmo la soluzione?
Martin Beckett,

1
@Martin anche se qualsiasi IA di base dovrebbe essere obbligata a difendere il suo creatore o essere lasciata a dubitare della propria esistenza.
Nicole,

Questo è uno sguardo grande e onesto a Lisp per AI di Peter Norvig, scritto circa 10 anni dopo la pubblicazione di Paradigms of AI Programming. norvig.com/Lisp-retro.html
michiakig

1
@jwenting: Penso che i punti più importanti di Norvig su Java siano ancora veri dieci anni dopo: Java non ha una funzione di meta-programmazione e non supporta la programmazione funzionale.
Kevin Cline,

Risposte:


22

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.


3
Questa proprietà si chiama Homoiconicity BTW.
Saluti

5

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).


5
Un modo migliore per dirlo potrebbe essere che quelli bravi in ​​AI stiano usando Lisp per questo.

1
E non è stato un caso, quando hanno iniziato i pionieri. Quali altre lingue potrebbero scegliere negli anni '50?
Bo Persson,

2
@Persson: direi che è stato un po ' per caso. Se PASCAL fosse la lingua successiva da creare dopo FORTRAN, ho dubbi sul fatto che l'IA sarebbe decollata. LISP non era solo un "candidato migliore" di FORTRAN, ma era anche (forse per caso!) Un candidato piuttosto bravo .
Quadrescenza,

Spieghi uno dei motivi per cui Lisp ha avuto un vantaggio (finanziamento) ma ha concluso che " il motivo per cui lisp era migliore per l'IA una volta non è più il caso".
Segna C

Ho perso il prossimo commento a cui stavo lavorando, ma spero di poter tornare e finire più tardi.
Marco C

3

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.


2
Devi prendere in considerazione quando si discute di prodotti commerciali (e ritengo che i contendenti alla sfida DARPA siano così, poiché sono stati creati in base a vincoli temporali e di budget) che LISP non è un atm linguistico comunemente noto e quindi i programmatori LISP competenti sono difficili trovare e probabilmente costosi (e / o eccentrici, non buoni membri per la squadra media). Quindi ha senso usare qualcos'altro anche se LISP potrebbe essere "migliore" (non dire che è necessariamente così, solo che i dati che presenti non sono conclusivi per affermare che non lo sono).
jwenting

3
Non c'è molta "intelligenza" in quei programmi. È un sacco di elaborazione del segnale, ecc. Anche i programmi di scacchi non usano l'IA. È principalmente forza bruta, ricerca altamente ottimizzata + altre cose.
Rainer Joswig,

"LISP non è un atm di lingua comunemente conosciuto e quindi i programmatori LISP competenti sono difficili da trovare e probabilmente costosi": Ho appena iniziato a imparare Common Lisp e non sembra affatto difficile. OK, per diventare un guru di Lisp potrebbe volerci molto tempo, ma non credo che sarebbe difficile trovare programmatori disposti ad imparare Lisp se avessero la possibilità di lavorare su progetti concreti.
Giorgio,

3

@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 evalfunzione, 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.


1
Le stesse parole di John McCarthy: www-formal.stanford.edu/jmc/history/lisp/lisp.html

@ Thorbjørn: grazie per il link. Anche se ho usato pesantemente Lisp per diversi anni, non ho mai prestato molta attenzione alla sua genesi.
Mike Dunlavey,

Anche se Prolog è buono come calcolo simbolico, non direi che è strettamente correlato a Lisp: Lisp è basato sul calcolo lambda, Prolog sulla logica del primo ordine (due diversi modelli di calcolo).
Giorgio,

@Giorgio: gli antenati e i cugini di Prolog sono per lo più scritti in cosa? Lisp. Programma di deduzione di Fischer Black, Micro-Planner, ecc. Per me, un buon libro su questo è Fondamenti deduttivi della programmazione informatica .
Mike Dunlavey,

"Gli antenati e i cugini di Prolog sono per lo più scritti in che cosa?": Ah OK, intendevi strettamente legati nel senso che uno era usato per implementare l'altro, non che seguissero un paradigma simile.
Giorgio,

1

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.