Каковы правила разрешения символов в виде макросов и параметров функций?

Я был удивлен, обнаружив, что альфа -преобразование небезопасно в 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 .

5
задан Matt Fenwick 16 August 2012 в 13:17
поделиться