Я определил макрос unless
следующим образом:
user=> (defmacro unless [expr body] (list 'if expr nil body))
#'user/unless
user=> (unless (= 1 2) (println "Yo"))
Yo
Как вы можете видеть, он отлично работает.
Теперь в Clojure список можно определить двумя способами:
; create a list
(list 1 2 3)
; shorter notation
'(1 2 3)
Это означает, что макрос unless
можно записать без ключевого слова list
. Однако это приводит к тому, что исключение Java исключается:
user=> (unless (= 1 2) (println "Yo"))
java.lang.Exception: Unable to resolve symbol: expr in this context
Может кто-нибудь объяснить, почему это не удается?