Я намагався зрозуміти різницю між 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.