Frage

Ich habe versucht, den Unterschied zwischen LiSP-1 und LiSP-2 und wie sich dies auf Clojure bezieht, aber ich verstehe immer noch nicht richtig. Kann mich jemand aufklären?

War es hilfreich?

Lösung

Entsprechend Wikipedia:

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

Es geht im Grunde genommen darum, ob Variablen und Funktionen denselben Namen haben können, ohne zusammenzukommen. Clojure ist ein Lisp-1 Dies bedeutet, dass der gleiche Name nicht für eine Funktion und eine Variable gleichzeitig verwendet werden kann.

Andere Tipps

Möglicherweise möchten Sie dies lesen Papier Von Richard Gabriel. Es ist eine Zusammenfassung der Probleme, über die die Lisp -Community in LISP1 vs LISP2 diskutierte. Es ist in den ersten Abschnitten ein bisschen dicht und sich langsam bewegt, ist jedoch viel einfacher zu lesen, wenn Sie Abschnitt 5 vorbeikommen.

Grundsätzlich verfügt LISP1 über eine einzelne Umgebung, die Symbole zu Werten bildet, und diese Werte können entweder "regulär" oder Funktionen sein. LISP2 hat (mindestens) zwei Namespaces (Symbole haben einen Slot für ihren Ein -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 (Funktion oder auf andere Weise) verweisen kann.

Es gibt mehrere Kompromisse und Geschmacksunterschiede zwischen den beiden, lesen jedoch das Papier für die Details. Christian Queinnecs Buch "Lisp in Small Stücke" diskutiert auch die Unterschiede, die durch den Text gewebt sind.

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