Was ist der Unterschied zwischen Lisp-1 und Lisp-2?

Ich habe versucht, den Unterschied zwischen Lisp-1 und Lisp-2 zu verstehen und wie dies mit Clojure zusammenhängt, aber ich verstehe es immer noch nicht richtig. Kann mich jemand aufklären?

   

Laut Wikipedia :

Ob ein separater Namespace für functionen von Vorteil ist, ist eine Konfliktquelle in der Lisp-Community. Es wird normalerweise als Lisp-1 vs. Lisp-2-Debatte bezeichnet. Lisp-1 bezieht sich auf das Schema-Modell und Lisp-2 bezieht sich auf das Common-Lisp-Modell.

Es geht im Wesentlichen darum, ob Variablen und functionen denselben Namen haben können, ohne zu kollidieren. Clojure ist ein Lisp-1, was bedeutet, dass derselbe Name nicht gleichzeitig für eine function und eine Variable verwendet werden kann.

Vielleicht möchten Sie dieses Papier von Richard Gabriel lesen. Es ist eine Zusammenfassung der Probleme, die die Lisp-Community in Lisp1 vs Lisp2 diskutierte. Es ist ein bisschen dicht und langsam in den ersten paar Abschnitten, aber es ist viel einfacher zu lesen, wenn Sie Abschnitt 5 vorbeikommen.

Grundsätzlich hat Lisp1 eine einzige Umgebung, die Symbole auf Werte abbildet, und diese Werte können entweder “regulär” oder functionen sein. Lisp2 hat (mindestens) zwei Namespaces (Symbole haben einen Slot für einen functionswert und einen für einen regulären Wert). In Lisp2 können Sie also eine function namens foo und einen Wert namens foo haben, während in Lisp1 der Name foo nur auf einen einzelnen Wert verweisen kann (function oder nicht).

Es gibt mehrere Kompromisse und Unterschiede zwischen den beiden, aber lesen Sie die Zeitung für die Details. In Christian Queinnecs Buch “Lisp in Small Pieces” geht es auch um die Unterschiede, die durch den Text gewoben sind.