Я попытался понять разницу между Lisp-1 и Lisp-2 и как это относится к Clojure, но я до сих пор не понимаю правильно. Может ли кто-нибудь просветить меня?В чем разница между Lisp-1 и Lisp-2?
ответ
По wikipedia:
ли отдельное пространство имен для функций является преимуществом является источником раздора в Лисп сообщества. Его обычно называют дискуссией Lisp-1 и Lisp-2. Lisp-1 относится к модели Scheme, а Lisp-2 относится к модели Common Lisp.
Речь идет о том, могут ли переменные и функции иметь одно и то же имя без столкновения. Clojure is a Lisp-1 означает, что он не позволяет использовать одно и то же имя для функции и переменной одновременно.
Возможно, вам понравится этот текст paper от Richard Gabriel. Это резюме проблем, обсуждаемых сообществом Lisp в Lisp1 vs Lisp2. Это немного плотное и медленное перемещение в первых нескольких разделах, но гораздо легче прочитать к тому времени, когда вы закончите раздел 5.
В принципе, Lisp1 имеет единую среду, которая отображает символы в значения, и эти значения могут быть либо «регулярных», либо функций. Lisp2 имеет (по крайней мере) два пространства имен (символы имеют слот для их значения функции и один для регулярного значения). Итак, в Lisp2 вы можете иметь функцию с именем foo и значением с именем foo, тогда как в Lisp1 имя foo может ссылаться только на одно значение (функция или иначе).
Существует несколько компромиссов и различий вкуса между ними, но читайте бумагу для деталей. Книга Кристиана Квиннека «Лисп в маленьких пьесах» также обсуждает различия, сплетенные в тексте.
Один из наиболее загадочных разделов газеты Габриэля - раздел 11 «Многопроцессорность». В этом разделе он подразумевает, что Lisp1 более благоприятствует функциональному стилю программирования, что в большей степени способствует многопроцессорности. Очевидно, это представляет интерес для Clojure. Но я не уверен, почему * Lisp1 более благоприятствует FP. Кто-нибудь знает об этом? –
, вероятно, потому, что основная точка FP - рассматривать функции как значения первого класса, поэтому гораздо удобнее и концептуально очищать их так же, как и все другие значения. – mikera
@PeterMcLain Когда пользователи диалектов Lisp-1 говорят, что Lisp- 1 является более проводящим к функциональному программированию, что они означают, что вам не нужно заполнять код, полный операторов 'funcall' и' function'. Они исчезают в Lisp-1. – Kaz
- 1. В чем разница между «и»?
- 2. В чем разница между `{}` и `[]`?
- 3. В чем разница между == и ===?
- 4. В чем разница между «+» и «\ +»?
- 5. В чем разница между + = и = +?
- 6. В чем разница между/* ... */и/** ... */
- 7. В чем разница между: и +:
- 8. В чем разница между $ {} и # {}
- 9. В чем разница между $ _. и $ _
- 10. В чем разница между = и: =
- 11. В чем разница между && и &?
- 12. В чем разница между $ {} и # {}?
- 13. В чем разница между + и%?
- 14. В чем разница между + = и = +
- 15. В чем разница между # {} $ {} и% {}?
- 16. В чем разница между «» и «»?
- 17. В чем разница между ['#'] и [. = '#']?
- 18. В чем разница между == ~ и! =?
- 19. В чем разница между «/» и «/ *»?
- 20. В чем разница между «./» и «../»?
- 21. В чем разница между {}()) и {})()
- 22. В чем разница между «'» и «»
- 23. В чем разница между «и«
- 24. В чем разница между (&& и &) и (|| и |)?
- 25. В чем разница между ....?
- 26. В чем разница между:
- 27. чем разница между [[], []] и [[]] * 2
- 28. чем разница между * и Object
- 29. В чем разница между работой. и^и^(. *) $?
- 30. В чем разница между = и == в java?
Не является ли Lisp-2 более запутанным, имея функции и переменные с теми же именами? – Zubair
Отчасти из-за того, что программисты, использующие диалекты Lisp-2, не уходят с пути, чтобы иметь функции и переменные с одинаковыми именами. 'list' часто используется как параметр функции, и никто ничего не делает, OMG настолько запутанно, что' (list ...) 'является стандартной функцией. Многие функции, которые имеют «список» в качестве переменной, не используют функцию «list» или не используют ее рядом с этой переменной. Даже если это произойдет, это не так уж плохо: '(list foo list)'. Это не более сбивает с толку, чем предложение, подобное «сражаться с хорошей борьбой», где одно и то же слово появляется как существительное и глагол. – Kaz
@ Zubair Java имеет еще больше пространств имен. Вы можете определить класс, метод и переменную с тем же именем. – ceving