【发布时间】:2014-07-25 11:32:13
【问题描述】:
这是我能做的最简单的例子:
(defmacro printer [& forms]
`(println ~@forms))
(defmacro adder [s]
`(inc ~s))
它们可以按预期使用:
(printer "haha")
=> "haha"
(adder 1)
=> 2
我可以macroexpand他们看看宏做了什么:
(macroexpand '(printer 1))
=> (clojure.core/println 1)
(macroexpand '(adder 1))
=> (clojure.core/inc 1)
但是当它们嵌套时,我得不到我想要的:
(macroexpand '(printer (adder 1)))
=> (clojure.core.println (adder 1))
我希望得到
=> (clojure.core.println (clojure.core/inc 1))
我有什么方法可以扩展嵌套宏吗? 这对我调试特定的错误很有帮助。
【问题讨论】: