it-roy-ru.com

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

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

89
Zubair

Согласно Википедия :

Преимущество раздельного пространства имен для функций - это источник спора в сообществе LISP. Это обычно упоминается как дебаты LISP-1 против LISP-2. LISP-1 относится к модели Схемы, а LISP-2 относится к модели Common LISP.

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

58
pauldoo

Вы можете прочитать это статья Ричарда Габриэля. Это краткое изложение проблем, которые сообщество LISP обсуждали в LISP1 против LISP2. В первых нескольких разделах он немного плотный и медленный, но к тому моменту, когда вы пройдете через раздел 5, его будет намного легче прочитать.

По сути, LISP1 имеет единую среду, которая отображает символы на значения, и эти значения могут быть либо "обычными", либо функциями. LISP2 имеет (как минимум) два пространства имен (символы имеют слот для своего значения функции и один для обычного значения). Таким образом, в LISP2 вы можете иметь функцию с именем foo и значение с именем foo, тогда как в LISP1 имя foo может ссылаться только на одно значение (функция или иное).

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

65
Peter McLain