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