Я пытался понять разницу между Lisp-1 и Lisp-2 и то, как это связано с Clojure, но я до сих пор не понимаю должным образом. Кто-нибудь может меня просветить?
Я пытался понять разницу между Lisp-1 и Lisp-2 и то, как это связано с Clojure, но я до сих пор не понимаю должным образом. Кто-нибудь может меня просветить?
Ответы:
Согласно википедии :
Вопрос о том, является ли отдельное пространство имен для функций преимуществом, является источником разногласий в сообществе Lisp. Обычно это называют дебатами Лисп-1 против Лисп-2. Lisp-1 относится к модели Scheme, а Lisp-2 относится к модели Common Lisp.
В основном это касается того, могут ли переменные и функции иметь одно и то же имя без конфликтов. Clojure - это Lisp-1, что означает, что он не позволяет использовать одно и то же имя для функции и переменной одновременно.
list
часто используется как параметр функции и ничего особенного, OMG, это так сбивает с толку, поскольку (list ...)
это стандартная функция. Многие функции, у которых list
есть переменная, не используют эту list
функцию или не используют ее рядом с этой переменной. Даже когда это происходит, это не так уж плохо (list foo list)
. Это не более сбивает с толку, чем предложение типа «сражайся добрым сражением», в котором одно и то же слово встречается как существительное и глагол.
Вы можете прочитать эту статью Ричарда Габриэля. Это сводка вопросов, которые сообщество Lisp обсуждало в Lisp1 vs Lisp2. Первые несколько разделов немного сложны и медленны, но читать их будет намного легче, когда вы пройдете раздел 5.
По сути, Lisp1 имеет единую среду, которая отображает символы в значения, и эти значения могут быть либо «обычными», либо функциями. Lisp2 имеет (как минимум) два пространства имен (у символов есть слот для значения функции и один для обычного значения). Итак, в Lisp2 вы можете иметь функцию с именем foo и значение с именем foo, тогда как в Lisp1 имя foo может относиться только к одному значению (функции или какому-либо другому).
Между ними есть несколько компромиссов и различий вкусов, но подробности читайте в статье. В книге Кристиана Кейннека «Лисп в маленьких кусочках» также обсуждаются различия, вплетенные в текст.
funcall
и function
операторов. Они исчезают в Лисп-1.