Существует , список на clojure.org из различий между Clojure и другим Шепелявит. Некоторые другие вещи я заметил использование Clojure:
Идиоматический Clojure склоняется в большой степени к неизменным структурам данных. Где угодно Вы видите SETF
в CL, вероятно, придется изменить в Clojure, чтобы в полной мере воспользоваться. (У Вас всегда есть опция использования изменяемых структур данных Java в Clojure, но большинство людей не делает.)
мультиметоды Clojure подобны CL (возможно более мощный, потому что можно диспетчеризировать на вещах кроме типа), но полноценный CLOS не доступен в Clojure. Использование Clojure struct
вместо этого, который является просто воображением hashmap. Система ООП Java также доступна, конечно. Некоторые люди работают над портированием CLOS к Clojure, но я не уверен, как далеко вдоль тех усилий в этой точке.
макросы Clojure работают немного по-другому, чем макросы CL когда дело доходит до разрешения символа/пространства имен. Я не уверен, понимаю ли я достаточно хорошо для объяснения различий. Вы не должны смешивать с gensyms вполне так же в Clojure, хотя, который хорош.
Clojure не имеет системы условия как CL. У Вас есть только Java try
/ catch
/ finally
для обработки исключений.
Clojure не позволяет пользовательские макросы читателя.
Clojure не имеет нескольких возвращаемых значений. Destructuring в Clojure очень хорош (списки поддержек, векторы, карты хеша, наборы и т.д.), и он встроен в большее количество мест, чем CL по умолчанию, таким образом, это - меньше проблемы, чем это могло быть.
В зависимости от приложения и как это записано, это может быть практично и просто к порту от CL до Clojure, или это может быть более практично для перезаписи его с нуля более функциональным, ориентированным на многопотоковое исполнение способом соответствовать лучше стилю Clojure.