Ich habe Lisp gelernt, um meinen Horizont zu erweitern, weil ich gehört habe, dass es in der KI-Programmierung verwendet wird. Nach einigen Erkundungen habe ich noch keine KI-Beispiele oder irgendetwas in der Sprache gefunden, das die Neigung dazu erhöhen würde.
Wurde Lisp in der Vergangenheit verwendet, weil es verfügbar war, oder fehlt mir etwas?
lisp
artificial-intelligence
Cristián Romo
quelle
quelle
Antworten:
Lisp wurde bis Ende der 1980er Jahre in der KI verwendet. In den 80er Jahren wurde Common Lisp jedoch als "KI-Sprache" an die Geschäftswelt verkauft. Die Gegenreaktion zwang die meisten KI-Programmierer für einige Jahre zu C ++. Heutzutage werden Prototypen normalerweise in einer jüngeren dynamischen Sprache (Perl, Python, Ruby usw.) geschrieben, und Implementierungen erfolgreicher Forschung erfolgen normalerweise in C oder C ++ (manchmal Java).
Wenn Sie neugierig auf die 70er Jahre sind ... nun, ich war nicht da. Aber ich denke, Lisp war aus drei Gründen (in der Reihenfolge der Wichtigkeit) in der KI-Forschung erfolgreich:
Ich habe nicht Peter Norvigs altes KI-Buch , aber es soll eine gute Möglichkeit sein, das Programmieren von KI-Algorithmen in Lisp zu lernen.
Haftungsausschluss: Ich bin ein Student der Computerlinguistik. Ich kenne das Teilfeld der Verarbeitung natürlicher Sprache viel besser als die anderen Felder. Vielleicht wird Lisp eher in anderen Unterfeldern verwendet.
quelle
Artificial Intelligence by Patrick Henry Winston
. In der 2. Auflage verzweigten sich die Programmierkapitel dieses Buches in ein eigenes, synchronisiertes BuchLisp
. Wie der Name schon sagt, ist die Programmierung vollständig inLisp
. people.csail.mit.edu/phw/Books/LISPBACK.HTMLLisp wird für KI verwendet, da es die Implementierung von Software unterstützt, die sehr gut mit Symbolen berechnet werden kann. Symbole, symbolische Ausdrücke und das Rechnen mit diesen bilden den Kern von Lisp.
Typische KI-Bereiche für das Rechnen mit Symbolen waren / sind: Computeralgebra, Theoremprüfung, Planungssysteme, Diagnose, Umschreibungssysteme, Wissensrepräsentation und Argumentation, Logiksprachen, maschinelle Übersetzung, Expertensysteme und mehr.
Es ist dann keine Überraschung, dass viele berühmte KI-Anwendungen in diesen Bereichen in Lisp geschrieben wurden:
In diesen Bereichen gibt es Tausende von Anwendungen, die in Lisp geschrieben sind. Sehr häufig ist, dass sie spezielle Fähigkeiten im Bereich der symbolischen Verarbeitung benötigen. Man implementiert spezielle Sprachen, die spezielle Interpreter / Compiler in diesen Domänen zusätzlich zu Lisp haben. Mit Lisp können Darstellungen für symbolische Daten und Programme erstellt und alle Arten von Maschinen implementiert werden, um diese Ausdrücke zu manipulieren (mathematische Formeln, logische Formeln, Pläne, ...).
(Beachten Sie, dass viele andere Allzweck-Programmiersprachen auch in AI verwendet werden. Ich habe versucht zu beantworten, warum besonders Lisp in AI verwendet wird.)
quelle
Ein Grund dafür ist, dass Sie die Sprache mit für Ihre Domain spezifischen Konstrukten erweitern können, sodass sie effektiv zu einer domänenspezifischen Sprache wird. Diese Technik ist unglaublich leistungsfähig, da Sie über das Problem, das Sie lösen, nachdenken können, anstatt über das Mischen von Bits.
quelle
Ich habe immer vermutet, dass es als funktionale Sprache nicht zwischen Code und Daten unterscheidet. Alles, einschließlich Funktionsdefinitionen und Funktionsaufrufe, kann als Liste behandelt und wie jedes andere Datenelement geändert werden.
So kann selbstinspektierender, selbstmodifizierender Code leicht geschrieben werden.
quelle
Eine mögliche Antwort ist, dass KI eine Sammlung sehr schwieriger Probleme ist und Lisp eine gute Sprache zur Lösung schwieriger Probleme ist, nicht nur KI.
Warum das so ist: Makros, generische Funktionen und eine umfassende Selbstbeobachtung ermöglichen präzisen Code und die einfache Einführung von Domänenabstraktionen - eine Sprache, die Sie leistungsfähiger machen können. Für viele Probleme ist das unnötig und mit eigenen Kosten verbunden, aber für andere Probleme wird diese Leistung benötigt, um Fortschritte zu erzielen.
quelle
Ich denke, es ist falsch, nur in Bezug auf KI darüber nachzudenken. Dinge wie der KI-Winter und kommerzielle Effekte auf gewöhnliches Lispeln lenken ab, wenn Sie fragen, warum es für KI verwendet wurde, nicht warum es jetzt nicht oft verwendet wird ...
Wie auch immer, ich denke, das liegt daran, dass der größte Teil des KI-Codes im Wesentlichen Forschungscode war. Lisp ist eine großartige Sprache für explorative Programmierung, für die Implementierung schwieriger Algorithmen, für selbstmodifizierenden und häufig modifizierten Code. Mit anderen Worten, für Forschungscode.
Ich verwende Lisp heute für einige meiner Forschungscodes (Mathematik, Signalverarbeitung), weil es flexibler und leistungsfähiger als die meisten Sprachen ist und dennoch effizienteren Code als die meisten Sprachen generiert. Normalerweise kann ich eine Leistung innerhalb eines Faktors von +/- 2 der C ++ - Geschwindigkeit erzielen, aber ich kann Dinge viel schneller implementieren und mit Komplexität umgehen, die viel mehr Zeit in Anspruch nimmt als bei Verwendung von C ++, Java, C #.
Das ist allerdings kein Thema. Ich denke, AI-Code wurde für eine Weile hauptsächlich in Common Lisp geschrieben, weil er ein leistungsfähiger Ansatz für die Erforschung von Code ist. Es ist immer noch; Aber als KI-Algorithmen besser verstanden und erforscht wurden, waren Teile von ihnen viel einfacher zu unterrichten und zu verwenden, so dass sie in Grundstudiengängen in den Sprachen des Jahres auftauchten. Von dort aus wird es zu einer Frage, was die Leute bereits wissen, welche Bibliotheken verfügbar sind und was für große Gruppen gut funktioniert.
quelle
Ich würde vermuten, dass ein großer Grund die Flexibilität von Listen als grundlegende Datenstruktur war.
Zu dieser Zeit war es die Sprache der Wahl, sie in alle Arten von zusammengesetzten Objekten und neue Dinge wie Nachrichtenübermittlung und Polimorphismus verwandeln zu können. Nicht speziell für KI, sondern für große, komplexe Aufgaben. vor allem, wenn sie mit Konzepten experimentierten.
quelle
Ich denke, Sie haben Recht: Lisp war ein praktisches Werkzeug, um Dinge zu hacken. Dies liegt daran, dass nicht viel zwischen Programm und Daten unterschieden wurde. Dadurch konnten Hacker Funktionen wie Daten sehr einfach manipulieren.
Aber Lisp ist für Menschen mit seinen Klammern und der Nichtunterscheidung zwischen Daten und Programm ziemlich schwer zu lesen. Heute werde ich lisp nicht für Produktions-KI-Code (oder vielleicht sogar für Prototyping) verwenden, würde aber Python für die Skripterstellung bevorzugen.
Eine andere zu berücksichtigende Sache sind die vorhandenen Bibliotheken / Werkzeuge in / in Bezug auf die Sprache. Ich bin nicht in der Lage, Lisp-Bibliotheken mit Python-Bibliotheken zu vergleichen, aber ich denke, Bibliotheken und Open Source sind jetzt viel wichtiger als zuvor.
Diese Antwort wurde durch den folgenden Vergleich zwischen Lisp und Python inspiriert: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html
quelle
Ich erinnere mich, dass Lisp als funktionale Sprache eine sehr gute Wahl für die Implementierung rekursiver Algorithmen war. Die Fähigkeit, einen Baum aufzuspüren und sich zurück zu arbeiten, ist wichtig, wenn man die Entscheidungsprozesse (Durchquerung) und das Endergebnis (Blattknoten) berücksichtigt.
Dies wurde mir während eines KI-Kurses an der Universität erzählt, an dem wir Lisp studiert haben.
quelle
Eine zynischere Antwort könnte sein, "weil es in den 1980er Jahren einen politischen KI-Krieg zwischen Japan und den USA verloren hat". Es gibt einen lustigen Blog-Beitrag, der über die Auswirkungen des Niedergangs des Computersystems der fünften Generation auf den Prolog spekuliert .
quelle