【发布时间】:2012-02-23 17:24:13
【问题描述】:
在概念层面上,LISP(和方言)中的宏获取一段代码(作为列表)并返回另一段代码(再次作为列表)。
根据上述原则,一个简单的宏可以是:
(defmacro zz [a] (list print a))
;macroexpand says : (#<core$print clojure.core$print@749436> "Hello")
但是在clojure中也可以写成:
(defmacro zz [a] `(print ~a))
;macroexpand says : (clojure.core/print "Hello")
我不确定这里的区别以及哪种方式应该是首选方式。第一个看起来很简单,因为我们应该返回列表并避免使用反勾号等奇怪的字符。
【问题讨论】:
标签: clojure