que define una macro unless
de la siguiente manera:Definición Clojure sintaxis macro
user=> (defmacro unless [expr body] (list 'if expr nil body))
#'user/unless
user=> (unless (= 1 2) (println "Yo"))
Yo
Como se puede ver que funciona bien.
Ahora, en Clojure una lista se puede definir de dos maneras:
; create a list
(list 1 2 3)
; shorter notation
'(1 2 3)
Esto significa que el unless
macro se puede escribir sin la palabra clave list
. Sin embargo, esto da como resultado una excepción de Java lanzada:
user=> (unless (= 1 2) (println "Yo"))
java.lang.Exception: Unable to resolve symbol: expr in this context
¿Alguien puede explicar por qué esto falla?
FYI, Clojure ya tiene macros similares en el núcleo, llamados 'when-not' y' if-not'. –