В чем разница между Лисп-1 и Лисп-2? - PullRequest
89 голосов
/ 02 января 2011

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

Ответы [ 2 ]

65 голосов
/ 02 января 2011

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

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

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

58 голосов
/ 02 января 2011

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

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

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

...