这个宏在Clojure中有什么问题?

时间:2009-07-25 01:45:03

标签: functional-programming macros clojure

(defmacro nif [expr pos zer neg]
  '(condp = (Integer/signum ~expr) 
     -1 ~neg
     0 ~zer
     1 ~pos))

我收到此错误。

1:1 user=> #<Namespace Chapter7Macros>
1:2 Chapter7Macros=> (nif 1 (+ 2 2) (- 2 2) (- 3 2))
1:3 Chapter7Macros=> java.lang.Exception: Unable to resolve symbol: expr in this context (repl-1:57)

2 个答案:

答案 0 :(得分:6)

用反引号(`)替换引号(')以启用语法引用。

答案 1 :(得分:3)

一般情况下使用(macroexpand-1'(nif 1 ...))会通过向您显示宏实际转换的代码来帮助很多。