Frage

Ich habe Lisp gelernt, um meinen Horizont zu erweitern, weil ich gehört habe, dass es in der KI-Programmierung verwendet wird.Nachdem ich einige Nachforschungen angestellt habe, 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 einfach etwas?

War es hilfreich?

Lösung

Lisp wurde im AI bis zum Ende der 1980er Jahre eingesetzt. In den 80er Jahren wurde in der Geschäftswelt als „AI Sprache“, obwohl, Common Lisp zu viel verkauft; das Spiel der meisten AI-Programmierer in C ++ für ein paar Jahre gezwungen. In diesen Tagen, Prototypen sind in der Regel in einer jüngeren dynamischen Sprache geschrieben (Perl, Python, Ruby, etc.) und Implementierungen erfolgreichen Forschung ist in der Regel in C oder C ++ (manchmal Java).

Wenn Sie über die 70er neugierig sind ... na ja, ich war nicht da. Aber ich denke, Lisp aus drei Gründen in KI-Forschung erfolgreich war (in der Reihenfolge ihrer Bedeutung):

  1. Lisp ist ein ausgezeichnetes Prototyping-Tool. Es war die beste für eine sehr lange Zeit. Lisp ist immer noch groß bei der Bewältigung ein Problem, das Sie wissen nicht, wie noch zu lösen. Diese Beschreibung charakterisiert AI perfekt.
  2. unterstützt Lisp symbolische Programmierung gut. Alte AI war auch symbolisch. Es war auch in dieser Hinsicht einzigartig für eine lange Zeit.
  3. Lisp ist sehr mächtig. Der Code / Daten-Unterscheidung ist schwächer, so dass es fühlt dehnbare als andere Sprachen, weil Ihre Funktionen und Makros aussehen wie die eingebauten in Sachen.

Ich habe kein Peter Norvig altes AI Buch , aber es soll eine gute Möglichkeit, um lernen KI-Algorithmen in Lisp programmiert werden.

Disclaimer: Ich bin ein Doktorand in der Computerlinguistik. Ich weiß, dass das Teilgebiet der Verarbeitung natürlicher Sprache viel besser als die anderen Felder. Vielleicht wird in anderen Teilfeldern mehr Lisp verwendet.

Andere Tipps

Lisp wird für KI verwendet, weil es die Implementierung von Software unterstützt, die sehr gut mit Symbolen rechnet.Symbole, symbolische Ausdrücke und das Rechnen mit diesen sind der Kern von Lisp.

Typische KI-Bereiche für das Rechnen mit Symbolen waren/sind:Computeralgebra, Beweisen von Theoremen, Planungssysteme, Diagnose, Rewrite-Systeme, Wissensdarstellung und Argumentation, Logiksprachen, maschinelle Übersetzung, Expertensysteme und mehr.

Es ist daher keine Überraschung, dass viele berühmte KI-Anwendungen in diesen Bereichen in Lisp geschrieben wurden:

  • Macsyma als erstes großes Computeralgebrasystem.
  • ACL2 wird als weit verbreiteter Theorembeweis verwendet, beispielsweise von AMD.
  • DART als Logistikplaner, der während des ersten Golfkriegs vom US-Militär eingesetzt wurde.Allein diese Lisp-Anwendung soll alle damaligen US-Investitionen in die KI-Forschung amortisiert haben.
  • SPIKE, die Planungs- und Terminierungsanwendung für das Hubble-Weltraumteleskop.Wird auch von mehreren anderen großen Teleskopen verwendet.
  • CYC, eines der größten geschriebenen Softwaresysteme.Darstellung und Argumentation im Bereich des menschlichen gesunden Menschenverstandes.
  • METAL, eines der ersten kommerziell genutzten Übersetzungssysteme für natürliche Sprache.
  • Autorisierungsassistent von American Express, der Kreditkartentransaktionen prüft.

In diesen Bereichen gibt es Tausende von Anwendungen, die in Lisp geschrieben sind.Für diese ist es sehr häufig, dass sie besondere Fähigkeiten im Bereich der symbolischen Verarbeitung benötigen.Man implementiert spezielle Sprachen, die zusätzlich zu Lisp spezielle Interpreter/Compiler in diesen Domänen haben.Mit Lisp können Sie Darstellungen für symbolische Daten und Programme erstellen und alle Arten von Maschinen zur Manipulation dieser Ausdrücke implementieren (mathematische Formeln, logische Formeln, Pläne usw.).

(Beachten Sie, dass in der KI auch viele andere allgemeine Programmiersprachen verwendet werden.Ich habe versucht zu beantworten, warum vor allem Lisp in der KI verwendet wird.)

Ein Grund dafür ist, dass es Ihnen die Sprache mit Konstrukten, die für Ihre Domain zu verlängern ermöglicht, es zu machen, effektiv, eine domänenspezifische Sprache. Diese Technik ist unglaublich mächtig, wie es Ihnen erlaubt, über die Problem der Vernunft Sie sind zu lösen, anstatt über Bits schlurfen.

Meine Vermutung ist immer, dass eine funktionale Sprache zu sein, ist es nicht zwischen Code und Daten unterschieden wird. Alles, einschließlich Funktionsdefinitionen und Funktionsaufrufe können als Listen und modifiziert wie jedes andere Stück von Daten behandelt werden.

So Selbstinspektion, selbst-modifizierenden Code leicht geschrieben werden.

Eine mögliche Antwort ist, dass AI eine Sammlung von sehr harten Probleme ist, und Lisp ist eine gute Sprache für harte Probleme zu lösen, nicht nur AI.

Wie, warum das heißt: Makros, generische Funktionen, und reiche Innerlichkeit ermöglichen kurzen Code und einfache Einführung von Domain-Abstraktionen - es ist eine Sprache, die Sie mächtiger machen. Für viele Probleme, die nicht notwendig ist, und es kommt mit seinen eigenen Kosten, sondern auch für andere Probleme, die Macht, jeden Fortschritt machen benötigt wird.

Ich denke, es ist falsch, nur um diese in Bezug auf die AI zu denken. Dinge wie die AI-Winter und kommerzielle Auswirkungen auf Common Lisp ablenken, wenn Sie fragen, warum es für AI verwendet wurde, warum nicht es nicht oft jetzt verwendet wird ...

Wie auch immer, ich denke, es ist, weil die meisten der Code AI war im Wesentlichen Forschungscode. Lisp ist eine großartige Sprache für die explorative Programmierung, für die Umsetzung schwieriger Algorithmen, für die Selbst Änderung und oft modifizierten Code. Mit anderen Worten, für die Forschung Code.

Ich benutze Lisp heute für einige meiner Forschung Code (Mathematik, Signalverarbeitung), weil es flexibler und leistungsfähiger als die meisten Sprachen, während noch effizienteren Code als die meisten Sprachen zu erzeugen. Ich kann in der Regel der Leistung innerhalb eines Faktors von +/- 2 von etwa c ++ Geschwindigkeit bekommen, aber ich kann die Dinge viel schneller implementieren, und befassen sich mit der Komplexität, die mir viel mehr Zeit in Anspruch nehmen würde, als ich habe, wenn ich verwenden, c ++, Java, C #.

Das ist zwar Thema wandert ab. Ich denke, AI-Code wurde für eine Weile in Common Lisp in erster Linie geschrieben, weil es ein leistungsfähiger Forschungsansatz Code. Es ist immer noch; sondern als `KI-Algorithmen wurden besser verstanden und erforschen, Teile von ihnen waren viel leichter zu lehren und zu verwenden, so dass sie auftauchten in Aroma-of-the-Jahres-Sprachen in under Kursen. Von dort aus wird es ein Problem, was die Leute schon wissen, welche Bibliotheken vorhanden sind, und was funktioniert gut für große Gruppen.

Ich würde vermuten, dass ein wichtiger Grund, die Flexibilität von Listen als Basisdatenstruktur ist.

zu der Zeit, in der Lage, sie in alle Arten von Composite-Objekte zu drehen, und neue Dinge als Nachricht passings und polimorphism, machte es die Sprache der Wahl; nicht speziell für AI, aber für große, komplexe Aufgaben. vor allem, wenn sie mit Konzepten experimentieren.

Ich glaube, du hast Recht: Lisp ein handliches Werkzeug für Hacker Dinge war auf. Dies ist, weil sie nicht viel zwischen Programm und Daten unterscheiden. Dies erlaubt Hacker Funktionen sehr leicht zu manipulieren, so wie Daten.

Aber Lisp ist ziemlich schwierig für die Menschen zu lesen, mit ihren Zahnspange und Nicht-Unterscheidung zwischen Daten und Programm. Heute werde ich nicht Lisp für jede Produktion AI-Code verwenden (oder vielleicht sogar Prototyping), sondern würde vielen Python für Skripting bevorzugen.

Eine andere Sache zu prüfen ist, die bestehenden Bibliotheken / Tools in / im Zusammenhang mit der Sprache. Ich bin nicht in der Lage, Lisp-Bibliotheken mit Python-Bibliotheken zu vergleichen, aber ich denke, Bibliotheken und Open Source viel mehr jetzt Rolle als zuvor.

Diese Antwort des folgenden Vergleich zwischen Lisp und Python inspiriert wurde:

Ich erinnere mich, dass zu hören, eine funktionale Sprache zu sein, war Lisp eine sehr gute Wahl rekursive Algorithmen zur Implementierung. Die Möglichkeit, einen Baum auf der Spur und arbeiten Sie Ihren Weg zurück wesentlich ist, wenn die Entscheidungsprozesse (Traversal) und Ergebnis (Blattknoten) berücksichtigen.

Dies wurde während eines AI Kurses an der Universität zu mir gesagt, wo wir Lisp untersucht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top