Frage 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?


76
2018-01-02 13:30


Ursprung


Antworten:


Gemäß Wikipedia:

Ob ein separater Namespace für Funktionen 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 Funktionen denselben Namen haben können, ohne zu kollidieren. Clojure ist ein Lisp-1 Dies bedeutet, dass derselbe Name nicht gleichzeitig für eine Funktion und eine Variable verwendet werden kann.


50
2018-01-02 14:52



Vielleicht möchten Sie dies lesen Papier- von Richard Gabriel. 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 Funktionen sein. Lisp2 hat (mindestens) zwei Namespaces (Symbole haben einen Slot für einen Funktionswert und einen für einen regulären Wert). In Lisp2 können Sie also eine Funktion namens foo und einen Wert namens foo haben, während in Lisp1 der Name foo nur auf einen einzelnen Wert verweisen kann (Funktion 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.


59
2018-01-02 17:43