Некоторые мысли о Лиспе, не относящиеся к Clojure (я не эксперт по Лиспу, поэтому я надеюсь, что они в основном правильные и полезные):
Кодирование в AST
Я мало что знаю о теории компилятора или интерпретатора, но каждый раз, когда я пишу код на Лиспе, меня поражает, что мне кажется, что он напрямую строит AST.
Это часть того, что означает «code = data», кодирование на Лиспе во многом похоже на заполнение структур данных (вложенных списков) узлами AST. Удивительно, и это тоже легко читать (с правильным текстовым редактором).
Программируемый язык программирования
Таким образом, фрагменты кода являются просто вложенными списками, а операции над списками являются частью языка. Таким образом, вы можете очень легко написать код на Lisp, который генерирует код на Lisp (см. Макросы Lisp). Это делает Лисп программируемым (сам по себе!) Языком программирования.
Это делает создание DSL или интерпретатора на Лиспе очень простым (см. Также мета-циклическая оценка ).
Никогда ничего не перезагружать
И в большинстве систем Lisp код (включая документацию) может быть подвергнут внутреннему анализу и оперативно заменен во время выполнения.
Продвинутый ООП
Затем большинство систем Lisp имеют своего рода объектную систему, основанную на CLOS, которая является усовершенствованной (по сравнению со многими реализациями ООП) и настраиваемой объектной системой (см. Искусство протокола метаобъекта ).
Все эти функции были изобретены давно, но я не уверен, что они доступны во многих других языках программирования (хотя большинство из них догоняют, например, с замыканиями), поэтому вам придется «заново открыть» и привыкнуть к ним, практикуя (см. книги в других ответах).