我定义了一个名为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
能有人解释一下为什么这个会失败吗?
when-not
和if-not
。 - Brian Carper