Я намагався зрозуміти різницю між Lisp-1 і Lisp-2 і те, як це пов'язано з Clojure, але я все ще не розумію належним чином. Хтось може мене просвітлити?
Я намагався зрозуміти різницю між Lisp-1 і Lisp-2 і те, як це пов'язано з Clojure, але я все ще не розумію належним чином. Хтось може мене просвітлити?
Відповіді:
Відповідно до wikipedia :
Чи є окремий простір імен для функцій перевагою, є джерелом суперечок у спільноті Lisp. Зазвичай його називають дебатами Lisp-1 проти Lisp-2. Lisp-1 посилається на модель Схеми, а Lisp-2 - на модель Common Lisp.
В основному йдеться про те, чи можуть змінні та функції мати однакові назви без зіткнення. Clojure - це Lisp-1, що означає, що він не дозволяє використовувати одне і те ж ім'я для функції та змінної одночасно.
list
часто використовується як параметр функції, і ніхто не робить цього, OMG, що так бентежить, оскільки (list ...)
є стандартною функцією. Багато функцій, які мають list
змінну, не використовують цю list
функцію або не використовують її поблизу цієї змінної. Навіть коли це трапляється , що це не так уже й погано: (list foo list)
. Це не є більш заплутаним, ніж речення на кшталт "битися з доброю боротьбою", де одне і те ж слово виступає як іменник та дієслово.
Можливо, ви хотіли б прочитати цю статтю Річарда Габріеля. Це короткий виклад питань, які обговорювала спільнота Lisp у Lisp1 проти Lisp2. Це трохи щільно і повільно рухається в перших кількох розділах, але набагато легше читається до того моменту, коли ви пройдете розділ 5.
В основному, Lisp1 має єдине середовище, яке відображає символи у значення, і ці значення можуть бути або "звичайними", або функціями. Lisp2 має (принаймні) два простори імен (символи мають слот для значення функції та один для звичайного значення). Отже, у Lisp2 ви можете мати функцію з іменем foo та значення з іменем foo, тоді як у Lisp1 назва foo може посилатися лише на одне значення (функція чи інше).
Існує кілька компромісів та відмінностей смаку між ними, але для деталей прочитайте статтю. У книзі Крістіана Квіннека "Шляпа маленькими шматками" також обговорюються відмінності, вплетені в текст.
funcall
та function
оператори. Вони зникають у Lisp-1.