Lispeln (Programmiersprache)

Lispeln (historisch, LISPELN) sind eine Familie von Computerprogrammiersprachen mit einer langen Geschichte und einem kennzeichnenden, völlig parenthesized polnische Präfix-Notation.

Ursprünglich angegeben 1958 ist Lispeln die zweite älteste Programmiersprache auf höchster Ebene im weit verbreiteten Gebrauch heute; nur Fortran ist (um ein Jahr) älter. Wie Fortran hat sich Lispeln viel geändert, seitdem seine frühen Tage und mehrere Dialekte über seine Geschichte bestanden haben. Heute sind die am weitesten bekannten Mehrzwecklispeln-Dialekte Allgemeines Lispeln und Schema.

Lispeln wurde als eine praktische mathematische Notation für Computerprogramme unter Einfluss der Notation der Kirchlambda-Rechnung von Alonzo ursprünglich geschaffen. Es ist schnell die begünstigte Programmiersprache für die Forschung der künstlichen Intelligenz (AI) geworden. Als eine der frühsten Programmiersprachen hat Lispeln für viele Ideen in der Informatik, einschließlich Baumdatenstrukturen, automatischen Lagerungsmanagements, des dynamischen Schreibens und des Selbstbewirtungsbearbeiters den Weg gebahnt.

Der Name LISPELN ist "auf LISTEN-Verarbeitung" zurückzuführen. Verbundene Listen sind eine der Hauptdatenstrukturen von Sprachen des Lispelns, und Lispeln-Quellcode wird selbst aus Listen zusammengesetzt. Infolgedessen können Lispeln-Programme Quellcode als eine Datenstruktur manipulieren, die Makrosysteme verursachend, die Programmierern erlauben, neue Syntax oder sogar neue bereichsspezifische im Lispeln eingebettete Sprachen zu schaffen.

Die Auswechselbarkeit des Codes und der Daten gibt auch Lispeln seine sofort erkennbare Syntax. Der ganze Programm-Code wird als S-Ausdrücke oder Parenthesized-Listen geschrieben. Ein Funktionsanruf oder syntaktische Form werden als eine Liste mit der Funktion oder dem Namen des Maschinenbedieners zuerst und den Argumenten im Anschluss an geschrieben; zum Beispiel könnte eine Funktion f, der drei Argumente nimmt, damit genannt werden.

Geschichte

Lispeln wurde von John McCarthy 1958 erfunden, während er am Institut von Massachusetts für die Technologie (MIT) war. McCarthy hat sein Design in einer Zeitung in Kommunikationen des ACM 1960, betitelt "Rekursive Funktionen von Symbolischen Ausdrücken und Ihrer Berechnung durch die Maschine veröffentlicht, erster Teil" (wurde "zweiter Teil" nie veröffentlicht). Er hat gezeigt, dass mit einigen einfachen Maschinenbedienern und einer Notation für Funktionen man eine Turing-ganze Sprache für Algorithmen bauen kann.

Informationsverarbeitungssprache war die erste AI Sprache, von 1955 oder 1956, und hat bereits viele der Konzepte, wie Listenverarbeitung und recursion eingeschlossen, der gekommen ist, um im Lispeln verwendet zu werden.

Die ursprüngliche Notation von McCarthy hat eingeklammerte "M Ausdrücke" verwendet, die in S-Ausdrücke übersetzt würden. Als ein Beispiel ist die M Ausdruck zum S-Ausdruck gleichwertig. Sobald Lispeln durchgeführt wurde, haben Programmierer schnell beschlossen, S-Ausdrücke zu verwenden, und M Ausdrücke wurde aufgegeben. M Ausdrücke ist wieder mit kurzlebigen Versuchen von MLISP durch Horace Enea und CGOL durch Vaughan Pratt aufgetaucht.

Lispeln wurde zuerst von Steve Russell auf einem Computer von IBM 704 durchgeführt. Russell hatte das Papier von McCarthy gelesen und begriffen (zur Überraschung von McCarthy), dass das Lispeln eval Funktion im Maschinencode durchgeführt werden konnte. Das Ergebnis war ein Arbeitslispeln-Dolmetscher, der verwendet werden konnte, um Lispeln-Programme, oder richtiger zu führen, 'Lispeln-Ausdrücke bewerten Sie.'

Zwei Zusammenbau-Sprachmakros für IBM 704 sind die primitiven Operationen geworden, wegen Listen zu zersetzen: (Inhalt des Adressteils der Register-Zahl) und (Inhalt des Verminderungsteils der Register-Zahl). Vom Zusammenhang ist es klar, dass der Begriff "Register" hier gebraucht, um "Speicherregister" zu bedeuten, heutzutage "Speicherposition" genannt wird. Lispeln-Dialekte verwenden noch und (und) für die Operationen, die den ersten Artikel in einer Liste und dem Rest der Liste beziehungsweise zurückgeben.

Der erste ganze Lispeln-Bearbeiter, der im Lispeln geschrieben ist, wurde 1962 von Tim Hart und Mike Levin an MIT durchgeführt. Dieser Bearbeiter hat das Lispeln-Modell der zusätzlichen Kompilation eingeführt, in der sich kompilierte und interpretierte Funktionen frei vermischen können. Die Sprache, die in Hart und dem Merkzettel von Levin verwendet ist, ist am modernen Lispeln-Stil viel näher als der frühere Code von McCarthy.

Lispeln war ein schwieriges System, um mit den Bearbeiter-Techniken und der Aktienhardware der 1970er Jahre durchzuführen. Müll-Sammlungsroutinen, die von dann-MIT dem Studenten im Aufbaustudium Daniel Edwards entwickelt sind, haben es praktisch gemacht, um Lispeln auf Mehrzweckrechensystemen zu führen, aber Leistungsfähigkeit war noch ein Problem. Das hat zur Entwicklung von Lispeln-Maschinen geführt: Hingebungsvolle Hardware, um Lispeln-Umgebungen und Programme zu führen. Fortschritte sowohl in der Computerhardware als auch in Bearbeiter-Technologie haben bald Lispeln-Maschinen veraltet gemacht.

Während der 1980er Jahre und der 1990er Jahre wurde eine große Anstrengung gemacht, die Arbeit an neuen Lispeln-Dialekten (größtenteils Nachfolger von Maclisp wie ZetaLisp und NULL (Neue Durchführung des Lispelns)) in eine einzelne Sprache zu vereinigen. Die neue Sprache, Allgemeines Lispeln, war mit den Dialekten etwas vereinbar, die sie ersetzt hat (das Buch Allgemeines Lispeln, bemerkt die Sprache die Vereinbarkeit von verschiedenen Konstruktionen). 1994 hat ANSI den Allgemeinen Lispeln-Standard, "ANSI X3.226-1994 Informationstechnologieprogrammiersprache Allgemeines Lispeln veröffentlicht."

Verbindung zur künstlichen Intelligenz

Seit seinem Beginn wurde Lispeln mit der Forschungsgemeinschaft der künstlichen Intelligenz besonders auf PDP-10 Systemen nah verbunden. Lispeln wurde als die Durchführung der Programmiersprache Mikroplaner verwendet, der im berühmten AI System SHRDLU verwendet wurde. In den 1970er Jahren, als AI Forschung kommerzielle Sprösse erzeugt hat, ist die Leistung von vorhandenen Lispeln-Systemen ein wachsendes Problem geworden.

Genealogie und Varianten

Über seine fünfzigjährige Geschichte hat Lispeln viele Schwankungen auf dem Kernthema einer S-Ausdruck-Sprache erzeugt. Außerdem kann jeder gegebene Dialekt mehrere Durchführungen — zum Beispiel haben, es gibt mehr als ein Dutzend Durchführungen des Allgemeinen Lispelns.

Unterschiede zwischen Dialekten können — zum Beispiel ziemlich sichtbar sein, Allgemeines Lispeln und Schema verwenden verschiedene Schlüsselwörter, um Funktionen zu definieren. Innerhalb eines Dialekts, der jedoch standardisiert wird, Durchführungen anpassend, unterstützen dieselbe Kernsprache, aber mit verschiedenen Erweiterungen und Bibliotheken.

Historisch bedeutende Dialekte

  • LISPELN 1 - die Erste Durchführung.
  • LISPELN 1.5 - Zuerst weit verteilte Version, die von McCarthy und anderen an MIT entwickelt ist. So genannt, weil es mehrere Verbesserungen auf dem ursprünglichen "LISPELN 1" Dolmetscher enthalten hat, aber nicht ein Hauptumstrukturieren war, weil würde das geplante LISPELN 2 sein.
  • LISPELN von Stanford 1.6 - Das war ein Nachfolger des LISPELNS 1.5 entwickelte am Laboratorium von Stanford AI, und hat weit zu PDP-10 Systemen verteilt, die die SPITZEN 10 Betriebssystem führen. Es wurde veraltet von Maclisp und InterLisp gemacht.
  • MACLISP - hat sich für den Projekt-MAC von MIT (keine Beziehung zum Macintosh des Apfels, noch McCarthy), direkter Nachkomme des LISPELNS 1.5 entwickelt. Es ist auf dem PDP-10 und den Systemen von Multics gelaufen. (MACLISP würde später kommen, um Maclisp genannt zu werden, und wird häufig MacLisp genannt.)
  • InterLisp - hat sich an BBN Technologies für PDP-10 Systeme entwickelt, die Tenex Betriebssystem, später angenommen als eine "Westküste" Lispeln für die Xerox-Lispeln-Maschinen als Zwischenlispeln-D führen. Eine kleine Version genannt "InterLISP 65" wurde für die 6502-basierte Computerlinie von Atari veröffentlicht. Eine Zeit lang waren Maclisp und InterLisp starke Mitbewerber.
  • Franz Lisp - ursprünglich ein Projekt von Berkeley; später entwickelt von Franz Inc. Der Name ist eine humorvolle Deformierung des Namens "Franz Liszt", und bezieht sich auf Allegro Allgemeinen Lisp, den Dialekt von Allgemeinem Lisp nicht, der von Franz Inc. in neueren Jahren verkauft ist.
  • XLISP, auf dem AutoLISP basiert hat.
  • Standardlispeln und Tragbares Standardlispeln wurden weit verwendet und besonders mit der Computeralgebra getragen, die das System REDUZIERT.
  • ZetaLisp, auch bekannt als Lispeln-Maschinenlispeln - verwendet auf den Lispeln-Maschinen, dem direkten Nachkommen von Maclisp. ZetaLisp hatte großen Einfluss auf das Allgemeine Lispeln.
  • LeLisp ist ein französischer Lispeln-Dialekt. Einer der ersten Schnittstelle-Baumeister wurde in LeLisp geschrieben.
  • Allgemeines Lispeln (1984), wie beschrieben, durch das Allgemeine Lispeln die Sprache - eine Verdichtung von mehreren auseinander gehenden Versuchen (ZetaLisp, Gewürz-Lispeln, NULL und S-1-Lispeln), um Nachfolger-Dialekte zu Maclisp mit substantivischen Einflüssen aus dem Schema-Dialekt ebenso zu schaffen. Diese Version des Allgemeinen Lispelns war für weiträumige Plattformen verfügbar und wurde von vielen als ein De-Facto-Standard bis zur Veröffentlichung des ANSI Allgemeinen Lispelns (ANSI X3.226-1994) akzeptiert.
  • Dylan war in seiner ersten Version eine Mischung des Schemas mit dem Allgemeinen Lispeln-Gegenstand-System.
  • EuLisp - versuchen, einen neuen effizienten zu entwickeln, und haben Lispeln aufgeräumt.
  • ISLISP - versuchen, einen neuen effizienten zu entwickeln, und haben Lispeln aufgeräumt. Standardisiert als ISO/IEC 13816:1997 und später revidiert als ISO/IEC 13816:2007: Informationstechnologie - Programmiersprachen, ihre Umgebungen und Systemsoftwareschnittstellen - Programmiersprache ISLISP.
  • IEEE Schema - IEEE Standard, 1178-1990 (R1995)
  • ANSI Allgemeines Lispeln - ein Standard von American National Standards Institute (ANSI) für das Allgemeine Lispeln, das vom Unterausschuss X3J13 geschaffen ist, gechartert, um mit dem Allgemeinen Lispeln zu beginnen: Die Sprache als ein Grunddokument und durch eine öffentliche Einigkeit zu arbeiten, geht in einer Prozession, um Lösungen von geteilten Problemen der Beweglichkeit von Programmen und Vereinbarkeit von Allgemeinen Lispeln-Durchführungen zu finden. Obwohl formell ein ANSI Standard, die Durchführung, Verkauf, verwendet, und der Einfluss des ANSI Allgemeinen Lispelns gewesen ist und fortsetzt, weltweit gesehen zu werden.
  • ACL2 oder "Eine Rechenbetonte Logik für das Applicative Allgemeine Lispeln", ein applicative (Nebenwirkung frei) Variante des Allgemeinen LISPELNS. ACL2 ist sowohl eine Programmiersprache, auf der Sie Computersysteme als auch ein Werkzeug modellieren können, um Beweis von Eigenschaften jener Modelle zu helfen.

Seit 2000

Sich etwas in den 1990er Jahren geneigt, hat Lispeln kürzlich ein Wiederaufleben von Interesse erfahren. Neueste Tätigkeit wird um offene Quelldurchführungen des Allgemeinen Lispelns eingestellt, und schließt die Entwicklung von neuen tragbaren Bibliotheken und Anwendungen ein. Eine neue Druckausgabe des Praktischen Allgemeinen Lispelns durch Peter Seibel, einen Tutorenkurs für neue Lispeln-Programmierer, wurde 2005 veröffentlicht. Es ist online frei zugänglich.

Viele neue Lispeln-Programmierer wurden von Schriftstellern wie Paul Graham und Eric S. Raymond angeregt, eine Sprache zu verfolgen, die andere als veraltet betrachtet haben. Neue Lispeln-Programmierer beschreiben häufig die Sprache als eine augenöffnende Erfahrung und behaupten, wesentlich produktiver zu sein, als auf anderen Sprachen. Dieser Zunahme im Bewusstsein kann zum AI "Winter" und dem kurzen Gewinn des Lispelns Mitte der 1990er Jahre gegenübergestellt werden.

Dan Weinreb verzeichnet in seinem Überblick über Allgemeine Lispeln-Durchführungen elf aktiv aufrechterhaltene Allgemeine Lispeln-Durchführungen. Scieneer Allgemeines Lispeln ist eine neue kommerzielle Durchführung, die von CMUCL mit einer ersten Ausgabe 2002 gegabelt ist.

Die offene Quellgemeinschaft hat neue Unterstützen-Infrastruktur geschaffen: CLiki ist ein wiki, der sich versammelt, hat Allgemeines Lispeln Information, die Allgemeinen Lispeln-Verzeichnislistenmittel verbunden, #lisp ist ein populärer IRC Kanal (mit der Unterstützung durch eine Lispeln-schriftliche Funktionseinheit), lisppaste unterstützt das Teilen und Kommentieren von Codeschnipseln, Planet-Lispeln sammelt den Inhalt von verschiedenem Lispeln-zusammenhängendem blogs, auf Benutzern von LispForum besprechen Lispeln-Themen, Lispjobs ist ein Dienst, um Job-Angebote bekannt zu geben, und es gibt eine wöchentliche Nachrichtenagentur, Wöchentliche Lispeln-Nachrichten. Common-lisp.net ist eine Bewirtungsseite für die offene Quelle Allgemeine Lispeln-Projekte.

50 Jahre des Lispelns (1958-2008) sind an LISP50@OOPSLA gefeiert worden. Es gibt regelmäßige lokale Benutzersitzungen in Boston, Vancouver und Hamburg. Andere Ereignisse schließen die europäische Allgemeine Lispeln-Sitzung, das europäische Lispeln-Symposium und eine Internationale Lispeln-Konferenz ein.

Die Schema-Gemeinschaft erhält aktiv mehr als zwanzig Durchführungen aufrecht. Mehrere bedeutende neue Durchführungen (Huhn, Gambit, Linkisch, Ikarus, Diebstahl, Ypsilon) sind in den letzten paar Jahren entwickelt worden. Der Revidierte Bericht über den Algorithmischen Sprachschema-Standard des Schemas wurde in der Schema-Gemeinschaft weit akzeptiert. Die Schema-Bitten um den Durchführungsprozess haben viele Quasistandardbibliotheken und Erweiterungen für das Schema geschaffen. Benutzergemeinschaften von individuellen Schema-Durchführungen setzen fort zu wachsen. Ein neuer Sprachstandardisierungsprozess wurde 2003 angefangen und der RRS Schema-Standard 2007 geführt. Der akademische Gebrauch des Schemas für die lehrende Informatik scheint, sich etwas geneigt zu haben. Einige Universitäten verwenden Schema in ihrer Informatik einleitende Kurse nicht mehr.

Es gibt mehrere neue Dialekte des Lispelns: Kreisbogen, Nu und Clojure.

Hauptdialekte

Die zwei Hauptdialekte des Lispelns, das für die Mehrzweckprogrammierung heute verwendet ist, sind Allgemeines Lispeln und Schema. Diese Sprachen vertreten bedeutsam verschiedene Designwahlen.

Allgemeines Lispeln ist ein Nachfolger von MacLisp. Die primären Einflüsse waren Lispeln-Maschinenlispeln, MacLisp, NULL, s-1 Lispeln, Gewürz-Lispeln und Schema. Es hat viele der Eigenschaften des Lispeln-Maschinenlispelns (ein großer Lispeln-Dialekt hat gepflegt, Lispeln-Maschinen zu programmieren), aber wurde entworfen, um effizient implementable auf jedem Personalcomputer oder Arbeitsplatz zu sein. Allgemeines Lispeln hat einen großen Sprachstandard einschließlich vieler eingebauter Datentypen, Funktionen, Makros und anderer Sprachelemente, sowie eines Gegenstand-Systems (Allgemeines Lispeln-Gegenstand-System oder kürzer CLOS). Allgemeines Lispeln hat auch bestimmte Eigenschaften vom Schema wie lexikalischer scoping und lexikalische Verschlüsse geliehen.

Schema (hat früher entwickelt), ist mehr Minimalist-Design, mit einem viel kleineren Satz von Standardeigenschaften, aber mit bestimmten Durchführungseigenschaften (wie Optimierung des Schwanz-Anrufs und volle Verlängerungen) nicht notwendigerweise gefunden im allgemeinen Lispeln.

Schema ist statisch scoped und ein richtig mit dem Schwanz rekursiver Dialekt der von Guy Lewis Steele dem Jüngeren erfundenen Lispeln-Programmiersprache. und Gerald Jay Sussman. Es wurde entworfen, um eine außergewöhnlich klare und einfache Semantik und wenige verschiedene Weisen zu haben, Ausdrücke zu bilden. Ein großes Angebot daran, Paradigmen, einschließlich des befehlenden, funktionellen, und Nachricht vorübergehende Stile zu programmieren, findet günstigen Ausdruck im Schema. Schema setzt fort, sich mit einer Reihe von Standards (Revidierter Bericht über das Algorithmische Sprachschema) und einer Reihe von Schema-Bitten um die Durchführung zu entwickeln.

Clojure ist ein neuer Dialekt des Lispelns, das Java Virtuelle Maschine (und der CLR) ins Visier nimmt. Es wird entworfen, um eine pragmatische Allzwecksprache zu sein. Clojure zieht beträchtliche Einflüsse von Haskell und legt einen sehr starken Wert auf die Unveränderlichkeit. Clojure ist eine kompilierte Sprache, weil er direkt zu JVM bytecode kompiliert, noch bleibt völlig dynamisch. Jede von Clojure unterstützte Eigenschaft wird an der Durchlaufzeit unterstützt. Clojure stellt Zugang zum javanischen Fachwerk und den Bibliotheken, mit fakultativen Typ-Hinweisen und Typ-Schlussfolgerung zur Verfügung, so dass Anrufe zu Java Nachdenken vermeiden und schnell primitive Operationen ermöglichen können.

Außerdem werden Lispeln-Dialekte als scripting Sprachen in mehreren Anwendungen, mit dem wohl bekanntesten Wesen Emacs Lispeln im Redakteur von Emacs, Sehlispeln in AutoCAD, Nyquist in der Kühnheit verwendet. Die kleine Größe eines minimalen, aber nützlichen Schema-Dolmetschers macht es besonders populär für eingebetteten scripting. Beispiele schließen SIOD und TinyScheme ein, von denen beide im GIMP Bildverarbeiter unter dem Gattungsnamen "Schrift-fu" erfolgreich eingebettet worden sind. LIBREP, ein Lispeln-Dolmetscher durch auf der Emacs-Lispeln-Sprache ursprünglich gestützten John Harper, ist im Fenster-Betriebsleiter Sawfish eingebettet worden.

Der Hinterlist-Dolmetscher wird in GnuCash verwendet. Innerhalb von GCC stellt das Steck-SCHMELZEN einen Dialekt des Lispelns-y zur Verfügung, der in C übersetzt ist, um den Bearbeiter durch das Codieren von zusätzlichen Pässen (darin zu erweitern, SCHMELZEN).

Sprachneuerungen

Lispeln war die erste homoiconic Programmiersprache: Die primäre Darstellung des Programm-Codes ist derselbe Typ der Listenstruktur, die auch für die Hauptdatenstrukturen verwendet wird. Infolgedessen können Lispeln-Funktionen manipuliert, verändert oder sogar innerhalb eines Lispeln-Programms ohne umfassende Syntaxanalyse oder Manipulation des binären Maschinencodes geschaffen werden. Das wird allgemein als einer der primären Vorteile der Sprache hinsichtlich seiner ausdrucksvollen Macht betrachtet, und macht die Sprache zugänglich der metacircular Einschätzung.

Die allgegenwärtige Struktur, "wenn dann sonst", jetzt als selbstverständlich betrachtet als ein wesentliches Element einer Programmiersprache, von McCarthy für den Gebrauch im Lispeln erfunden wurde, wo es sein erstes Äußeres in einer allgemeineren Form (die cond Struktur) gesehen hat. Es wurde durch das Algol geerbt, das es verbreitet hat.

Lispeln hat tief Alan Kay, den Führer der Forschung über den Plausch beeinflusst, und dann der Reihe nach war Lispeln unter Einfluss des Plausches, durch das Übernehmen objektorientierter Programmiereigenschaften (Klassen, Beispiele, usw.) gegen Ende der 1970er Jahre. Die Geschmäcke wenden System (später CLOS) eingeführte Mehrfachvererbung ein.

Lispeln hat das Konzept der automatischen Müll-Sammlung eingeführt, in der das System der Haufen spazieren geht, nach unbenutztem Gedächtnis suchend. Die meisten modernen hoch entwickelten Müll-Sammlungsalgorithmen wie Generational-Müll-Sammlung wurden für das Lispeln entwickelt.

Größtenteils wegen seiner Quellenvoraussetzungen in Bezug auf die frühe Rechenhardware (einschließlich früher Mikroprozessoren) ist Lispeln so populär außerhalb der AI Gemeinschaft nicht geworden wie Fortran und die Algol-hinuntergestiegene c Sprache. Neuere Sprachen wie Java und Pythonschlange haben einige beschränkte Versionen von einigen der Eigenschaften des Lispelns vereinigt, aber sind notwendigerweise unfähig, die Kohärenz und Synergie der vollen im Lispeln gefundenen Konzepte zu bringen. Wegen seiner Eignung zu komplizierten und dynamischen Anwendungen genießt Lispeln zurzeit ein Wiederaufleben vom populären Interesse.

Syntax und Semantik

:Note: Die Beispiele dieses Artikels werden im allgemeinen Lispeln geschrieben (obwohl die meisten auch im Schema gültig sind).

Symbolische Ausdrücke

Lispeln ist eine Ausdruck-orientierte Sprache. Verschieden von den meisten anderen Sprachen wird keine Unterscheidung zwischen "Ausdrücken" und "Behauptungen" gemacht; der ganze Code und Daten werden als Ausdrücke geschrieben. Wenn ein Ausdruck bewertet wird, erzeugt er einen Wert (im allgemeinen Lispeln, vielleicht vielfache Werte), der dann in andere Ausdrücke eingebettet werden kann. Jeder Wert kann jeder Datentyp sein.

Das 1958-Papier von McCarthy hat zwei Typen der Syntax eingeführt: S-Ausdrücke (Symbolische Ausdrücke, auch genannt "sexps"), die die innere Darstellung des Codes und der Daten widerspiegeln; und M Ausdrücke (Meta Expressions), die Funktionen von S-Ausdrücken ausdrücken. M Ausdrücke hat nie Gefallen gefunden, und fast alles Lispelt heute Gebrauch-S-Ausdrücke, um sowohl Code als auch Daten zu manipulieren.

Der Gebrauch von Parenthesen ist der am meisten sofort offensichtliche Unterschied des Lispelns zu anderen Programmiersprache-Familien. Infolgedessen haben Studenten lange Lispeln-Spitznamen solcher als Verloren In Dummen Parenthesen oder vielen Irritierenden Überflüssigen Parenthesen gegeben. Jedoch ist die S-Ausdruck-Syntax auch für viel Macht des Lispelns verantwortlich: Die Syntax ist äußerst regelmäßig, der Manipulation durch den Computer erleichtert. Jedoch wird die Syntax des Lispelns auf die traditionelle Parenthese-Notation nicht beschränkt. Es kann erweitert werden, um alternative Notationen einzuschließen. XMLisp ist zum Beispiel eine Allgemeine Lispeln-Erweiterung, die das Metaobject-Protokoll verwendet, um S-Ausdrücke mit der Ausziehbaren Preiserhöhungssprache (XML) zu integrieren.

Das Vertrauen auf Ausdrücken gibt der Sprache große Flexibilität. Weil Lispeln-Funktionen selbst als Listen geschrieben werden, können sie genau wie Daten bearbeitet werden. Das erlaubt das leichte Schreiben von Programmen, die andere Programme (metaprogramming) manipulieren. Viele Lispeln-Dialekte nutzen diese Eigenschaft mit Makrosystemen aus, der Erweiterung der Sprache fast ohne Grenze ermöglicht.

Listen

Eine Lispeln-Liste wird mit seinen Elementen geschrieben, die durch whitespace getrennt sind, und hat durch Parenthesen umgeben. Zum Beispiel, ist eine Liste, deren Elemente drei Atome sind: die Werte, und. Diese Werte werden implizit getippt: Sie sind beziehungsweise zwei ganze Zahlen, und ein mit dem Lispeln spezifischer Datentyp hat ein "Symbol" genannt, und müssen als solcher nicht erklärt werden.

Die leere Liste wird auch als das spezielle Atom vertreten. Das ist die einzige Entität im Lispeln, das sowohl ein Atom als auch eine Liste ist.

Ausdrücke werden als Listen mit der Präfix-Notation geschrieben. Das erste Element in der Liste ist der Name einer Form, d. h., eine Funktion, Maschinenbediener, spezieller "oder Makromaschinenbediener" (sieh unten.) Der Rest der Liste sind die Argumente. Zum Beispiel gibt die Funktion seine Argumente als eine Liste, so der Ausdruck zurück

(haben Sie '1 '2 'foo Schlagseite)

</syntaxhighlight>

bewertet zur Liste. Das "Zitat" vor den Argumenten im vorhergehenden Beispiel ist ein "spezieller Maschinenbediener", der die angesetzten Argumente davon abhält, bewertet zu werden (nicht ausschließlich notwendig für die Zahlen, da 1 zu 1, usw. bewertet). Irgendwelche nicht zitierten Ausdrücke werden rekursiv bewertet, bevor der Umgeben-Ausdruck bewertet wird. Zum Beispiel,

(haben Sie 1 2 Schlagseite (haben Sie 3 4 Schlagseite))

</syntaxhighlight>

bewertet zur Liste. Bemerken Sie, dass das dritte Argument eine Liste ist; Listen können verschachtelt werden.

Maschinenbediener

Arithmetische Maschinenbediener werden ähnlich behandelt. Der Ausdruck

(+ 1 2 3 4)

</syntaxhighlight>

bewertet zu 10. Die Entsprechung laut der klammerlosen Darstellung würde "" sein. Arithmetische Maschinenbediener im Lispeln sind variadic (oder n-stufig), fähig, jede Zahl von Argumenten zu nehmen.

"Spezielle Maschinenbediener" (manchmal genannt "spezielle Formen") stellen die Kontrollstruktur des Lispelns zur Verfügung. Zum Beispiel nimmt der spezielle Maschinenbediener drei Argumente. Wenn das erste Argument Nichtnull ist, bewertet es zum zweiten Argument; sonst bewertet es zum dritten Argument. So, der Ausdruck

(wenn Null

(haben Sie 1 2 "foo" Schlagseite)

(haben Sie 3 4 "Bar" Schlagseite))

</syntaxhighlight>

bewertet dazu. Natürlich würde das nützlicher sein, wenn ein nichttrivialer Ausdruck im Platz dessen eingesetzt worden war.

Lambda-Ausdrücke

Ein anderer spezieller Maschinenbediener wird verwendet, um Variablen zu Werten zu binden, die dann innerhalb eines Ausdrucks bewertet werden. Dieser Maschinenbediener wird auch verwendet, um Funktionen zu schaffen: Die Argumente dafür sind eine Liste von Argumenten, und der Ausdruck oder die Ausdrücke, zu denen die Funktion bewertet (ist der zurückgegebene Wert der Wert des letzten Ausdrucks, der bewertet wird). Der Ausdruck

(Lambda (arg) (+ arg 1))

</syntaxhighlight>

bewertet zu einer Funktion, die, wenn angewandt, ein Argument nimmt, es dazu bindet und die Nummer ein zurückgibt, die größer ist als dieses Argument. Lambda-Ausdrücke werden nicht verschieden von genannten Funktionen behandelt; sie werden derselbe Weg angerufen. Deshalb, der Ausdruck

((Lambda (arg) (+ arg 1)) 5)

</syntaxhighlight>

bewertet dazu.

Atome

Im ursprünglichen LISPELN gab es zwei grundsätzliche Datentypen: Atome und Listen. Eine Liste war eine begrenzte bestellte Folge von Elementen, wo jedes Element an sich entweder ein Atom oder eine Liste ist, und ein Atom eine Zahl oder ein Symbol war. Ein Symbol war im Wesentlichen ein einzigartiger genannter Artikel, schriftlich als eine Alphanumerische Schnur im Quellcode, und hat entweder als ein Variablenname oder als ein Datenartikel in der symbolischen Verarbeitung verwendet. Zum Beispiel enthält die Liste drei Elemente: das Symbol FOO, die Liste und die Nummer 2.

Der wesentliche Unterschied zwischen Atomen und Listen war, dass Atome unveränderlich und einzigartig waren. Zwei Atome, die in verschiedenen Plätzen in der Quelle erschienen sind, codieren, aber wurden auf genau dieselbe Weise geschrieben hat denselben Gegenstand vertreten, wohingegen jede Liste ein getrennter Gegenstand war, der unabhängig von anderen Listen verändert werden konnte und von anderen Listen vergleichsweise Maschinenbediener bemerkenswert sein konnte.

Da mehr Datentypen in späteren Lispeln-Dialekten und entwickelten Programmierstilen eingeführt wurden, hat das Konzept eines Atoms Wichtigkeit verloren. Viele Dialekte haben noch das Prädikat-Atom für die Vermächtnis-Vereinbarkeit behalten, es wahr für jeden Gegenstand definierend, der nicht ein Lernen ist.

Conses und Listen

Eine Lispeln-Liste ist eine einzeln verbundene Liste. Jede Zelle dieser Liste wird ein Lernen (im Schema, einem Paar) genannt, und wird aus zwei Zeigestöcken, genannt das Auto und cdr zusammengesetzt. Diese sind zu gleichwertig, und im Artikel besprochene Felder haben Liste beziehungsweise verbunden.

Der vielen Datenstrukturen, die daraus gebaut werden können, lernt Zellen, einer der grundlegendsten wird eine richtige Liste genannt. Eine richtige Liste ist irgendein das spezielle (leere Liste) Symbol, oder ein Lernen in der die Punkte zu einer Gegebenheit (der ein anderer sein kann, lernt Struktur, wie eine Liste), und die Punkte zu einer anderen richtigen Liste.

Wenn ein gegebener lernt, wird genommen, um der Kopf einer verbundenen Liste zu sein, dann weist sein Auto zum ersten Element der Liste hin, und sein cdr weist zum Rest der Liste hin. Deshalb und Funktionen werden auch genannt, und wenn man sich auf conses bezieht, die ein Teil einer verbundenen Liste (aber nicht sagen wir ein Baum) sind.

So ist eine Lispeln-Liste nicht ein Atomgegenstand, wie ein Beispiel einer Behälterklasse in C ++ oder Java sein würde. Eine Liste ist nichts anderes als eine Anhäufung von verbundenem conses. Eine Variable, die sich auf eine gegebene Liste bezieht, ist einfach ein Zeigestock zum ersten lernt in der Liste. Das Traversal einer Liste kann durch "cdring unten" die Liste getan werden; d. h. das Bringen aufeinander folgenden cdrs, um jeden zu besuchen, lernt der Liste; oder durch das Verwenden von einigen mehrerer höherwertiger Funktionen, eine Funktion über eine Liste kartografisch darzustellen.

Weil conses und Listen in Lispeln-Systemen so universal sind, ist es ein häufiger Irrtum, dass sie die einzigen Datenstrukturen des Lispelns sind. Tatsächlich Lispeln alle außer dem am meisten vereinfachten haben andere Datenstrukturen - wie Vektoren (Reihe), Hash-Tabellen, Strukturen und so weiter.

S-Ausdrücke vertreten Listen

Parenthesized S-Ausdrücke vertreten verbundene Listenstrukturen. Es gibt mehrere Weisen, dieselbe Liste wie ein S-Ausdruck zu vertreten. Ein Lernen kann in der Notation des punktierten Paares als geschrieben werden, wo das Auto und der cdr ist. Eine längere richtige Liste könnte in der Notation des punktierten Paares geschrieben werden. Das wird als in der Listennotation herkömmlich abgekürzt. Eine unpassende Liste kann in einer Kombination der zwei - bezüglich der Liste von drei conses geschrieben werden, deren letzter cdr (d. h., die Liste in der völlig angegebenen Form) ist.

Listenbearbeitende Verfahren

Lispeln stellt viele eingebaute Verfahren zur Verfügung, um auf Listen zuzugreifen und sie zu kontrollieren. Listen können direkt mit dem Verfahren geschaffen werden, das jede Zahl von Argumenten nimmt, und die Liste dieser Argumente zurückgibt.

(haben Sie 1 2 '3 Schlagseite)

; Produktion: (1 2 3)

</syntaxhighlight>

(haben Sie 1' (2 3) 4) Schlagseite

; Produktion: (1 (2 3) 4)

</syntaxhighlight>

Wegen der Weise, von wie Listen gebaut werden, lernt Paare, das Verfahren kann verwendet werden, um ein Element zur Vorderseite einer Liste hinzuzufügen. Bemerken Sie, dass das Verfahren darin asymmetrisch ist, wie es Listenargumente, wegen behandelt, wie Listen gebaut werden.

(lernt 1' (2 3))

; Produktion: (1 2 3)

</syntaxhighlight>

(lernt' (1 2) '(3 4))

; Produktion: ((1 2) 3 4)

</syntaxhighlight>

Das Verfahren hängt zwei (oder mehr) Listen zu einander an. Weil Lispeln-Listen Listen verbunden werden, hat das Befestigen von zwei Listen asymptotische Zeitkompliziertheit

(hängen Sie' (1 2) '(3 4)) an

; Produktion: (1 2 3 4)

</syntaxhighlight>

(hängen Sie' (1 2 3) '' (a) '(5 6)) an

; Produktion: (1 2 3 5 6)

</syntaxhighlight>

Geteilte Struktur

Lispeln-Listen, einfache verbundene Listen seiend, können Struktur miteinander teilen. Das heißt, können zwei Listen denselben Schwanz oder Endfolge von conses haben. Zum Beispiel, nach der Ausführung des folgenden Allgemeinen Lispeln-Codes:

(setf foo (haben ''b 'c) Schlagseite)

(setf Bar (lernt 'x (cdr foo)))

</syntaxhighlight>

die Listen und sind und beziehungsweise. Jedoch ist der Schwanz dieselbe Struktur in beiden Listen. Es ist nicht eine Kopie; lernt Zellen, die dazu hinweisen, und sind in denselben Speicherpositionen für beide Listen.

Das Teilen der Struktur anstatt des Kopierens kann eine dramatische Leistungsverbesserung geben. Jedoch kann diese Technik auf unerwünschte Weisen mit Funktionen aufeinander wirken, die sich verändern, sind Listen zu ihnen als Argumente gegangen. Das Verändern einer Liste, solcher als durch das Ersetzen mit a, wird den anderen betreffen:

(setf (Drittel foo) 'Gans)

</syntaxhighlight>

Das ändert sich dazu, aber ändert sich dadurch auch zu - ein vielleicht unerwartetes Ergebnis. Das kann eine Quelle von Programmfehlern sein, und Funktionen, die ihre Argumente verändern, werden als zerstörend aus diesem wirklichen Grund dokumentiert.

Fans der funktionellen Programmierung vermeiden zerstörende Funktionen. Im Schema-Dialekt, der den funktionellen Stil bevorzugt, werden die Namen von zerstörenden Funktionen mit einem warnenden Ausrufezeichen oder "Schlag" — solcher als gekennzeichnet (gelesener Satz-Autoschlag), der das Auto eines Lernens ersetzt. Im Allgemeinen Lispeln-Dialekt sind zerstörende Funktionen gewöhnlich; die Entsprechung davon wird für genannt "ersetzen Auto." Diese Funktion wird jedoch selten gesehen, weil Allgemeines Lispeln eine spezielle Möglichkeit einschließt, um es leichter zu machen, zerstörende Funktionen zu definieren und zu verwenden. Ein häufiger Stil im allgemeinen Lispeln ist, Code funktionell zu schreiben (ohne zerstörende Anrufe), wenn prototyping, um dann zerstörende Anrufe als eine Optimierung hinzuzufügen, wo es sicher ist, so zu tun.

Das Selbstauswerten von Formen und Bezug

Lispeln bewertet Ausdrücke, in die vom Benutzer eingegangen wird. Symbole und Listen bewerten zu einigem anderem (gewöhnlich, einfacher) Ausdruck - zum Beispiel, ein Symbol bewertet zum Wert der Variable, die es nennt; bewertet dazu. Jedoch bewerten die meisten anderen Formen zu sich: Wenn Sie in Lispeln eintreten, kehrt es zurück.

Jeder Ausdruck kann auch gekennzeichnet werden, um es davon abzuhalten, bewertet zu werden (wie für Symbole und Listen notwendig ist). Das ist die Rolle des speziellen Maschinenbedieners oder seine Abkürzung (ein einzelnes Anführungszeichen). Zum Beispiel gewöhnlich, wenn Sie ins Symbol eingehen, werden Sie den Wert der entsprechenden Variable zurückbekommen (oder ein Fehler, wenn es keine solche Variable gibt). Wenn Sie sich auf das wörtliche Symbol beziehen möchten, gehen Sie herein oder, gewöhnlich.

Sowohl Allgemeines Lispeln als auch Schema unterstützen auch den backquote Maschinenbediener (bekannt als Quasizitat im Schema), eingegangen mit dem Charakter. Das ist fast dasselbe, weil das einfache Zitat, außer ihm Ausdrücken erlaubt, bewertet zu werden, und ihre Werte in eine angesetzte Liste mit dem Komma und Komma - an Maschinenbedienern interpoliert. Wenn die Variable den Wert hat, dann bewertet dazu, während dazu bewertet. Der backquote wird am häufigsten im Definieren von Makrovergrößerungen verwendet.

Das Selbstauswerten von Formen und angesetzten Formen ist die Entsprechung des Lispelns von Druckfehlern. Es kann möglich sein, die Werte (veränderlicher) Druckfehler im Programm-Code zu modifizieren. Zum Beispiel, wenn eine Funktion eine angesetzte Form zurückgibt, und der Code, der die Funktion nennt, die Form modifiziert, kann das das Verhalten der Funktion auf nachfolgenden Wiederholungen verändern.

(defun "sollte" unveränderlich

sein

' (ein zwei drei))

(lassen Sie ((Zeug (sollte))) unveränderlich

sein

(setf (das dritte Zeug) 'bizarr)); schlecht!

(sollte

unveränderlich sein); Umsatz (zwei bizarr)

</syntaxhighlight>

Das Ändern einer angesetzten Form wie das wird allgemein als schlechter Stil betrachtet, und wird durch das ANSI Allgemeine Lispeln als falsch definiert ("auf unbestimmtes" Verhalten auf kompilierte Dateien hinauslaufend, weil der Dateibearbeiter ähnliche Konstanten verschmelzen, sie im schreibgeschützten Gedächtnis, usw. stellen kann).

Die Formalisierung des Lispelns des Kostenvoranschlags ist von Douglas Hofstadter (in Gödel, Escher, Junggesellen) und andere als ein Beispiel der philosophischen Idee von der Selbstverweisung bemerkt worden.

Spielraum und Verschluss

Die moderne Lispeln-Familie spaltet über den Gebrauch von dynamischen oder statischen (auch bekannt als lexikalisch) Spielraum. Clojure, Allgemeines Lispeln und Schema machen von statischem scoping standardmäßig Gebrauch, während Newlisp, Picolisp und die eingebetteten Sprachen in Emacs und AutoCAD dynamischen scoping verwenden.

Listenstruktur des Programm-Codes; Ausnutzung durch Makros und Bearbeiter

Eine grundsätzliche Unterscheidung zwischen Lispeln und anderen Sprachen ist, dass im Lispeln die Textdarstellung eines Programms einfach eine menschlich-lesbare Beschreibung derselben inneren Datenstrukturen ist (verbundene Listen, Symbole, Zahl, Charaktere, usw.), wie durch das zu Grunde liegende Lispeln-System verwendet würde.

Lispeln verwendet das, um ein sehr starkes Makrosystem durchzuführen. Wie andere Makrosprachen wie C, ein Makrorückcode, der dann kompiliert werden kann. Jedoch, verschieden von C Makros, sind die Makros Lispeln-Funktionen und können so die Vollmacht des Lispelns ausnutzen.

Weiter, weil Lispeln-Code dieselbe Struktur wie Listen hat, können Makros mit einigen der listenbearbeitenden Funktionen auf der Sprache gebaut werden. Kurz gesagt, irgendetwas, was Lispeln zu einer Datenstruktur, Lispeln-Makros tun kann, kann tun, um zu codieren. Im Gegensatz, auf den meisten anderen Sprachen, ist die Produktion des parser zur Sprachdurchführung rein inner und kann vom Programmierer nicht manipuliert werden.

Das macht es leicht, effiziente Sprachen innerhalb von Sprachen zu entwickeln. Zum Beispiel kann das Allgemeine Lispeln-Gegenstand-System sauber als eine Spracherweiterung mit Makros durchgeführt werden. Das bedeutet, dass, wenn eine Anwendung einen verschiedenen Erbe-Mechanismus, sagen wir, verlangt, sie ein verschiedenes Gegenstand-System verwenden kann. Das ist in der steifen Unähnlichkeit in die meisten anderen Sprachen, zum Beispiel unterstützt Java Mehrfachvererbung nicht, und es gibt keine angemessene Weise, es hinzuzufügen.

In vereinfachten Lispeln-Durchführungen wird diese Listenstruktur direkt interpretiert, um das Programm zu führen; eine Funktion ist wörtlich ein Stück der Listenstruktur, die vom Dolmetscher in der Durchführung davon überquert wird. Jedoch schließen wesentlichste Lispeln-Systeme auch einen Bearbeiter ein. Der Bearbeiter übersetzt Listenstruktur in den Maschinencode oder bytecode für die Ausführung. Dieser Code kann so schnell wie Code führen, der auf herkömmlichen Sprachen wie C kompiliert ist.

Makros breiten sich vor dem Kompilationsschritt aus, und bieten so einige interessante Optionen an. Wenn ein Programm einen vorgeschätzten Tisch braucht, dann könnte ein Makro den Tisch während der Übersetzung schaffen, so braucht der Bearbeiter nur Produktion der Tisch und braucht Code nicht zu nennen, um den Tisch in der Durchlaufzeit zu schaffen. Einige Lispeln-Durchführungen haben sogar einen Mechanismus, der Code erlaubt, während der Übersetzungszeit da zu sein (wenn ein Makro es brauchen würde), aber nicht anwesend im ausgestrahlten Modul.

Einschätzung und die read-eval-print Schleife

Lispeln-Sprachen werden oft mit einer interaktiven Befehl-Linie verwendet, die mit einer einheitlichen Entwicklungsumgebung verbunden werden kann. Die Benutzertypen in Ausdrücken an der Befehl-Linie, oder leitet den IDE, um sie dem Lispeln-System zu übersenden. Lispeln liest die eingegangenen Ausdrücke, bewertet sie, und druckt das Ergebnis. Deshalb wird die Lispeln-Befehl-Linie "read-eval-print Schleife" oder REPL genannt.

Die grundlegende Operation des REPL ist wie folgt. Das ist eine vereinfachte Beschreibung, die viele Elemente eines echten Lispelns, wie Bezug und Makros weglässt.

Die Funktion akzeptiert TextS-Ausdrücke als Eingang, und analysiert sie in eine innere Datenstruktur grammatisch. Zum Beispiel, wenn Sie den Text am schnellen tippen, übersetzt das in eine verbundene Liste mit drei Elementen: das Symbol, die Nummer 1 und die Nummer 2. Es geschieht so, dass diese Liste auch ein gültiges Stück des Lispeln-Codes ist; d. h. es kann bewertet werden. Das ist, weil das Auto der Liste eine Funktion — die Hinzufügungsoperation nennt.

Bemerken Sie, dass ein Wille als ein einzelnes Symbol gelesen wird. wird als die Nummer 123 gelesen. wird als die Schnur "123" gelesen.

Die Funktion bewertet die Daten, Null oder mehr andere Lispeln-Daten infolgedessen zurückgebend. Einschätzung muss Interpretation nicht bedeuten; einige Lispeln-Systeme kompilieren jeden Ausdruck zum heimischen Maschinencode. Es ist jedoch einfach, Einschätzung als Interpretation zu beschreiben: Eine Liste zu bewerten, deren Auto eine Funktion zuerst nennt, bewertet jedes der Argumente, die in seinem cdr gegeben sind, wendet dann die Funktion auf die Argumente an. In diesem Fall ist die Funktion Hinzufügung, und Verwendung davon zur Argument-Liste gibt die Antwort nach. Das ist das Ergebnis der Einschätzung.

Das Symbol bewertet zum Wert des Symbols foo. Daten wie die Schnur "123" bewerten zu derselben Schnur. Die Liste bewertet zur Liste (1 2 3).

Es ist der Job der Funktion, Produktion dem Benutzer zu vertreten. Weil ein einfaches Ergebnis wie das trivial ist. Ein Ausdruck, der zu einem Stück der Listenstruktur bewertet hat, würde verlangen, dass die Liste überqueren und es als ein S-Ausdruck ausdrucken.

Um ein Lispeln REPL durchzuführen, ist es nur notwendig, diese drei Funktionen und eine Funktion der unendlichen Schleife durchzuführen. (Natürlich wird die Durchführung dessen kompliziert, da sie auch alle speziellen Maschinenbediener wie durchführen muss oder.) Das getan ist ein grundlegender REPL selbst nur eine einzelne Linie des Codes:.

Das Lispeln REPL stellt normalerweise auch Eingabeaufbereitung, eine Eingangsgeschichte, das Fehlerberühren und eine Schnittstelle zum Testhilfeprogramm zur Verfügung.

Lispeln wird gewöhnlich eifrig bewertet. Im allgemeinen Lispeln werden Argumente in der Applicative-Ordnung bewertet ('leftmost am innersten'), während in der Schema-Ordnung von Argumenten unbestimmt ist, Zimmer für die Optimierung durch einen Bearbeiter verlassend.

Kontrollstrukturen

Lispeln hatte ursprünglich sehr wenige Kontrollstrukturen, aber noch viele wurden während der Evolution der Sprache hinzugefügt. (Der ursprüngliche bedingte Maschinenbediener des Lispelns ist der Vorgänger zu späteren Strukturen.)

Programmierer im Schema-Dialekt drücken häufig Schleifen mit dem Schwanz recursion aus. Die Allgemeinheit des Schemas in der akademischen Informatik hat einige Studenten dazu gebracht zu glauben, dass Schwanz recursion das einzige, oder das allgemeinste, Weise ist, Wiederholungen im Lispeln zu schreiben, aber das ist falsch. Alle oft gesehenen Lispeln-Dialekte haben befehlend-artige Wiederholungskonstruktionen von der Schleife des Schemas bis die komplizierten Ausdrücke des allgemeinen Lispelns. Außerdem ist das Schlüsselproblem, das das eine objektive aber nicht subjektive Sache macht, dass Schema spezifische Voraussetzungen für das Berühren von Schwanz-Anrufen macht, und folglich der Grund, dass der Gebrauch des Schwanzes recursion allgemein für das Schema gefördert wird, darin besteht, dass die Praxis durch die Sprachdefinition selbst ausdrücklich unterstützt wird. Im Vergleich verlangt ANSI Allgemeines Lispeln die als Schwanz-Anruf-Beseitigung allgemein gekennzeichnete Optimierung nicht. Folglich ist die Tatsache, dass Schwanz rekursiver Stil weil ein zufälliger Ersatz für den Gebrauch von traditionelleren Wiederholungskonstruktionen (solcher als, oder) im allgemeinen Lispeln entmutigt wird, nicht nur eine Sache der stilistischen Vorliebe, aber potenziell eine der Leistungsfähigkeit (da ein offenbarer Schwanz allgemeines Lispeln herbeiruft, kann als ein einfacher Sprung nicht kompilieren), und Programm-Genauigkeit (da Schwanz recursion Stapel-Gebrauch im allgemeinen Lispeln vergrößern kann, Stapel-Überschwemmung riskierend).

Einige Lispeln-Kontrollstrukturen sind spezielle Maschinenbediener, die zu den syntaktischen Schlüsselwörtern anderer Sprachen gleichwertig sind. Ausdrücke mit diesen Maschinenbedienern haben dasselbe Oberflächenäußere, wie Funktion ruft, aber unterscheiden Sie sich darin, werden die Argumente — oder im Fall von einem Wiederholungsausdruck nicht notwendigerweise bewertet, können mehr bewertet werden als einmal.

Im Gegensatz zu den meisten anderen Hauptprogrammiersprachen erlaubt Lispeln dem Programmierer, Kontrollstrukturen mit der Sprache selbst durchzuführen. Mehrere Kontrollstrukturen werden als Lispeln-Makros durchgeführt, und können sogar vom Programmierer makroausgebreitet werden, der wissen will, wie sie arbeiten.

Sowohl Allgemeines Lispeln als auch Schema haben Maschinenbediener für den nichtlokalen Kontrollfluss. Die Unterschiede in diesen Maschinenbedienern sind einige der tiefsten Unterschiede zwischen den zwei Dialekten. Schema unterstützt einspringende Verlängerungen mit dem Verfahren, das einem Programm erlaubt, zu sparen (und später wieder herzustellen), ein besonderer Platz in der Ausführung. Allgemeines Lispeln unterstützt einspringende Verlängerungen nicht, aber unterstützt wirklich mehrere Weisen, Flucht-Verlängerungen zu behandeln.

Oft kann derselbe Algorithmus im Lispeln entweder in einer Befehlsform oder in einem funktionellen Stil ausgedrückt werden. Wie bemerkt, oben neigt Schema dazu, den funktionellen Stil, mit dem Schwanz recursion und den Verlängerungen zu bevorzugen, Kontrollfluss auszudrücken. Jedoch ist befehlender Stil noch ziemlich möglich. Der von vielen Allgemeinen Lispeln-Programmierern bevorzugte Stil kann vertrauter für Programmierer scheinen, die an strukturierte Sprachen wie C verwendet sind, während das, das von Verschwörern näher bevorzugt ist, rein-funktionellen Sprachen wie Haskell ähnelt.

Wegen des frühen Erbes des Lispelns in der Listenverarbeitung hat es eine breite Reihe von höherwertigen Funktionen in Zusammenhang mit der Wiederholung über Folgen. In vielen Fällen, wo eine ausführliche Schleife auf anderen Sprachen (wie eine Schleife in C) im Lispeln erforderlich wäre, kann dieselbe Aufgabe mit einer höherwertigen Funktion vollbracht werden. (Dasselbe trifft auf viele funktionelle Programmiersprachen zu.)

Ein gutes Beispiel ist eine Funktion, die im Schema genannt wird und im allgemeinen Lispeln genannt wird. In Anbetracht einer Funktion und einer oder mehr Listen, wendet die Funktion nacheinander auf die Elemente der Listen in der Ordnung an, die Ergebnisse in einer neuen Liste sammelnd:

(mapcar #' +' (1 2 3 4 5) '(10 20 30 40 50))

</syntaxhighlight>

Das wendet die Funktion auf jedes entsprechende Paar von Listenelementen an, das Ergebnis nachgebend.

Beispiele

Hier sind Beispiele des Allgemeinen Lispeln-Codes.

Das grundlegende "Hallo" Weltprogramm:

(drucken Sie "Hallo Welt")

</syntaxhighlight>

Wie der Leser von der obengenannten Diskussion bemerkt haben kann, leiht Lispeln-Syntax sich natürlich zu recursion. Mathematische Probleme wie die Enumeration rekursiv definierter Sätze sind einfach, in dieser Notation auszudrücken.

Bewerten Sie einen factorial einer Zahl:

(defun factorial (n)

(wenn (

Eine alternative Durchführung, häufig schneller als die vorherige Version, wenn das Lispeln-System Schwanz recursion Optimierung hat:

(defun factorial (n &optional (acc 1))

(wenn (

Die Unähnlichkeit mit einer wiederholenden Version, die das Makro des allgemeinen Lispelns verwendet:

(defun factorial (n)

(Schleife weil ich von 1 bis n

für fac = 1 dann (* fac i)

schließlich (geben fac zurück)))

</syntaxhighlight>

Die folgende Funktion kehrt eine Liste um. (Die eingebaute Umkehrfunktion des Lispelns macht dasselbe.)

(defun - Rückseite (Liste)

(lassen Sie ((Rückwert' ))

(dolist (e Liste) (stoßen e Rückwert))

Rückwert))

</syntaxhighlight>

Gegenstand-Systeme

Verschiedene Gegenstand-Systeme und Modelle sind oben auf, neben, oder ins Lispeln gebaut worden, einschließlich:

  • Das Allgemeine Lispeln-Gegenstand-System, CLOS, ist ein integraler Bestandteil des ANSI Allgemeinen Lispelns. CLOS ist von Neuen Geschmäcken und CommonLOOPS hinuntergestiegen. ANSI Allgemeines Lispeln war die erste standardisierte objektorientierte Programmiersprache (1994, ANSI X3J13).
  • ObjectLisp oder Gegenstand-Lispeln, das von Lisp Machines Incorporated und frühen Versionen des Macintoshes Allgemeines Lispeln verwendet ist
  • SCHLEIFEN (Lispeln Objektorientiertes Programmiersystem) und späterer CommonLOOPS
  • Geschmäcke, die an MIT und seinem Nachkommen Neue Geschmäcke gebaut sind (entwickelt durch die Symbolik).
  • KR (kurz für die Kenntnisse-Darstellung), ein Einschränkungsbasiertes Gegenstand-System hat sich entwickelt, um dem Schreiben des Granats, einer GUI Bibliothek für das Allgemeine Lispeln zu helfen.
  • KEE hat ein Gegenstand-System genannt EINHEITEN verwendet und hat es mit einem Interferenzmotor und einem Wahrheitswartungssystem (ATMS) integriert.

Siehe auch

Weiterführende Literatur

Links

Geschichte

Vereinigungen und Sitzungen

Bücher und Tutorenkurse

Interviews

  • Mündliches Geschichtsinterview mit John McCarthy am Institut von Charles Babbage, der Universität Minnesotas, Minneapolis. McCarthy bespricht seine Rolle in der Entwicklung des Time-Sharings am Institut von Massachusetts für die Technologie. Er beschreibt auch seine Arbeit in der künstlichen Intelligenz (AI), die von der Fortgeschrittenen Forschungsprojektagentur, einschließlich logikbasierten AI (LISPELN) und Robotertechnik gefördert ist.
  • Interview mit Richard P. Gabriel (Podcast)

Mittel


Loki / Liste der logarithmischen Identität
Impressum & Datenschutz