линия Рича на это следующим образом
«Так как мы говорим о синтаксисе , давайте посмотрим на классический Lisp. Кажется, это самый простой синтаксис, все это в скобках список символов, цифр и несколько других. Что может быть проще ? ut в действительности, это не самое простое, так как до достичь этой однородности, должна быть существенная перегрузка значения значений списков. Это могут быть вызовы функций, группировка конструкций или литералов данных и т. Д. И определение, которое требует с использованием контекста, увеличивая когнитивную нагрузку при сканировании кода до , оценивает его значение. Clojure добавляет еще несколько композитных литералов данных в списки и использует их для синтаксиса. При этом это означает, что списки - почти всегда вызываемые вещи, а векторы используются для группировки, и карты имеют свои собственные литералы. Переход от одной структуры данных три снижает когнитивный нагрузка по существу.»
Одна из вещей, которые он считает, был перегружен в стандартном синтаксисе было время доступа. Таким образом, вектор синтаксис аргументов связан с постоянная временем доступа, когда вы использовали их. Он сказал:
Кажется странным, хотя он действителен только для одной формы ... как только он хранится в переменной или передается каким-либо образом информация «потеряна». Например. ..
(defn test [a]
(nth a 0)) ;;<- what is the access time of and element of a?
Я лично предпочитаю суровые yntax изменяется, как скобки, зарезервированные для того, когда программист должен переключать умственные модели, например. для встроенных языков.
;; Example showing a possible syntax for an embedded prolog.
{size [],0}
{size([H|T],N) :- size(T,N1), N is N1+1}
(size '(1 2 3 4) 'n) ;; here we are back to lisp code
Такая концепция синтаксически постоянна. Во время выполнения вы не «обходите» структуру. Перед временем выполнения (чтение/макрос/время компиляции) другое дело, поэтому, когда это возможно, часто лучше хранить вещи в виде списков.
[edit]
первоисточником, кажется, нет, но вот еще одна запись интервью: https://gist.github.com/rduplain/c474a80d173e6ae78980b91bc92f43d1#file-code-quarterly-rich-hickey-2011-md
Параметр 'Синтаксис LET' не является специфической особенностью Common Lisp. В основном каждый Lisp (Emacs Lisp, ISLisp, Scheme, ...) поддерживает этот синтаксис. Clojure нет. –
Clojure 'let' связывается последовательно. Таким образом, это эквивалентно CL и Scheme 'let *'. – Sylwester