以下转自我的博客:oschina
相比较common lisp
(defmacro t1 (fn-name)
`(defmacro ,fn-name (x)
`(+ ,x 1)))
(defmacro t1 [name1]
`(defmacro ~name1 [x]
`(+ ~x 1)))
会出问题,
必须用autogensym
(defmacro t1 [name1]
`(defmacro ~name1 [x#]
`(+ ~x# 1)))
总结: clojure 的宏还是有些弱, 虽然防止了变量的陷阱. common lisp的宏略微强些, 但可能有副作用, 可能射到脚趾