В чем разница между Lisp -1 и Lisp -2?

Я попытался понять разницу между Lisp -1 и Lisp -2 и как это относится к Clojure, но я все еще не понимаю правильно. Может ли кто-нибудь просветить меня?

Ответ 1

Согласно wikipedia:

Является ли отдельным пространством имен для функций преимуществом, является источником разногласий в сообществе Lisp. Обычно это называют дискуссиями Lisp -1 и Lisp -2. Lisp -1 относится к модели схемы, а Lisp -2 относится к общей модели Lisp.

В основном это касается того, могут ли переменные и функции иметь одно и то же имя без столкновения. Clojure - это Lisp -1, что означает, что он не позволяет использовать одно и то же имя для функции и переменной одновременно.

Ответ 2

Вам может понравиться этот paper Ричард Габриэль. Это сводка проблем, обсуждаемых сообществом Lisp в Lisp1 vs Lisp2. Это немного плотное и медленное движение в первых нескольких разделах, но гораздо легче прочитать к тому времени, когда вы закончите раздел 5.

В принципе, Lisp1 имеет единую среду, которая отображает символы в значения, и эти значения могут быть либо "регулярными", либо функциями. Lisp2 имеет (по крайней мере) два пространства имен (символы имеют слот для их значения функции и один для регулярного значения). Итак, в Lisp2 вы можете иметь функцию с именем foo и значением с именем foo, тогда как в Lisp1 имя foo может ссылаться только на одно значение (функция или иначе).

Есть несколько компромиссов и различий вкуса между ними, но прочитайте статью для деталей. Книга Кристиана Квиннеса "Lisp в" Маленьких пьесах "также обсуждает различия, сплетенные в тексте.