" Die größte Programmiersprache, die jemals erstellt wurde "
- Alan Kay, "auf Lisp"

Als McCarthy in den späten 1950er Jahren Lisp entwickelte, unterschied es sich grundlegend von den vorhandenen Sprachen, von denen
Fortran die wichtigste war.
Lisp hat neun neue Ideen umgesetzt:
1.
Bedingungen . Bedingte Anweisungen sind ein if-then-else-Konstrukt. Jetzt nehmen wir sie als selbstverständlich an. Sie wurden
von McCarthy während der Entwicklung von Lisp
erfunden . (Fortran hatte zu der Zeit nur Anweisungen, die in engem Zusammenhang mit Branchenanweisungen für die zugrunde liegende Hardware standen.) McCarthy gab im Algol-Komitee bedingte Anweisungen in Algol ab, von wo aus sie sich auf andere Sprachen ausbreiteten.
2.
Funktionstypen (Ein Funktionstyp) . In Lisp sind Funktionen Objekte der ersten Klasse - sie sind ein Datentyp wie Zahlen, Zeichenfolgen usw. und haben eine Literaldarstellung. Sie können in Variablen gespeichert und als Argumente usw. übergeben werden.
3.
Rekursion . Natürlich existierte die Rekursion vor Lisp als mathematisches Konzept, aber Lisp war die erste Programmiersprache, die sie unterstützte. (Dies ist möglicherweise beim Erstellen von Funktionen als erstklassige Objekte impliziert.)
4.
Ein neues Konzept von Variablen . In Lisp sind alle Variablen effiziente Zeiger. Werte sind, was Typen haben, keine Variablen, und das Zuweisen oder Binden von Variablen bedeutet, dass Zeiger kopiert werden und nicht, auf was sie zeigen.
5.
Müllabfuhr .
6.
Programme setzen sich aus Ausdrücken zusammen (Programme setzen sich aus Ausdrücken zusammen) . Lisp-Programme sind Ausdrucksbäume, von denen jedes einen Wert zurückgibt. (Einige Lisp-Ausdrücke können mehrere Werte zurückgeben.) Dies steht im Gegensatz zu Fortran und vielen anderen erfolgreichen Sprachen, die zwischen „Ausdrücken“ und „Anweisungen“ unterscheiden.
Es war natürlich, einen solchen Unterschied in Fortran zu haben, weil die Sprache linear ausgerichtet war (nicht überraschend für eine Sprache, in der das Eingabeformat eine Lochkarte war). Sie konnten keine verschachtelten Anweisungen haben. Und während Sie mathematische Ausdrücke brauchten, um zu arbeiten, hatte es keinen Sinn, etwas anderes zu zwingen, einen Wert zurückzugeben, da es möglicherweise nicht etwas gab, das auf eine Rückkehr wartete.
Mit dem Aufkommen blockstrukturierter Sprachen wurden die Beschränkungen aufgehoben, aber zu diesem Zeitpunkt war es bereits zu spät. Die Unterscheidung zwischen Ausdrücken und Anweisungen wurde bereits behoben. Es ging von Fortran nach Algol und weiter zu ihren Nachkommen.
Wenn die Sprache vollständig aus Ausdrücken besteht, können Sie nach Belieben Ausdrücke erstellen. Sie können entweder schreiben (mit
Arc- Syntax)
(if foo (= x 1) (= x 2))
entweder
(= x (if foo 1 2))
7.
Ein Symboltyp . Zeichen unterscheiden sich von Zeichenfolgen. In diesem Fall können Sie die Gleichheit überprüfen, indem Sie die Zeiger vergleichen.
8.
Eine Notation für Code unter Verwendung von Bäumen aus Zeichen.
9.
Die ganze Sprache immer verfügbar . Es gibt keinen offensichtlichen Unterschied zwischen Lesezeit, Kompilierungszeit und Laufzeit. Sie können Code während des Lesens kompilieren oder ausführen oder Code während des Kompilierens lesen oder ausführen oder Code zur Laufzeit lesen oder kompilieren.
Durch Ausführen von Code während des Lesens können Benutzer die Lisp-Syntax neu programmieren. Das Ausführen von Code zur Kompilierungszeit ist die Basis für Makros. Die Laufzeitkompilierung ist die Grundlage für die Verwendung von Lisp als Erweiterungssprache in Programmen wie Emacs. Und schließlich können Programme beim Lesen zur Laufzeit mithilfe von S-Ausdrücken interagieren. Diese Idee wurde kürzlich in XML neu erfunden.
Fazit
Als Lisp gerade erfunden wurde, waren all diese Ideen weit entfernt von den üblichen Programmierpraktiken, die in den späten 1950er Jahren von der verfügbaren Hardware vorgegeben wurden.
Im Laufe der Zeit entwickelte sich die Standardsprache, die zum Erfolg der Volkssprachen beitrug, allmählich zu Lisp. Punkte 1-5 sind jetzt weit verbreitet. Punkt 6 taucht im Mainstream auf. In Python gibt es in irgendeiner Form Element 7, obwohl es keine geeignete Syntax gibt. Klausel 8, die (mit Klausel 9) Makros in Lisp ermöglicht, ist immer noch nur in Lisp, vielleicht weil (a) diese Klammern oder etwas genauso Schlechtes erforderlich sind, und (b) wenn Wenn Sie diesen letzten Machtzuwachs hinzufügen, können Sie nicht länger behaupten, eine neue Sprache erfunden zu haben, sondern nur einen neuen Lisp-Dialekt entwickelt zu haben. -)
Obwohl dies für moderne Programmierer nützlich ist, ist es seltsam, Lisp darin zu beschreiben, wie es sich von zufälligen Tricks unterscheidet, die in anderen Sprachen verwendet werden. Vielleicht dachte McCarthy das nicht. Lisp wurde nicht entwickelt, um Fortran-Fehler zu beheben. es schien eher ein Nebenprodukt des Versuchs zu sein,
Berechnungen zu
axiomatisieren .