Я был удивлен, обнаружив, что альфа -преобразование небезопасно в Clojure:
Clojure> ((fn [o] (o 3 2)) +)
5
Clojure> ((fn [or] (or 3 2)) +)
3
Clojure> ((fn [def] (def 3 2)) +)
java.lang.RuntimeException: First argument to def must be a Symbol
(Я ожидал, что все три фрагмента будут оценены как 5 ).
Каково правило (и )для разрешения символов, когда задействованы затенение, макросы и специальные формы?
Я использую версию на Попробуйте Clojure .