マクロを作成する関数を定義しようとしていますが、マクロの名前を動的に指定しようとすると問題が発生します。これが私が直面している問題を例示する絞り込まれたコードです:
(defn create-times-macro [n]
(defmacro thatManyTimes [a]
`(* ~n ~a)))
(create-times-macro 2)
(thatManyTimes 3) ;; evals to 6
ここまでは順調ですね。ここで、マクロの名前をパラメーターとして指定するとします。
(defn create-times-macro [macroName n]
(defmacro macroName [a]
`(* ~n ~a)))
(create-times-macro (symbol "multiplyBy") 3)
(multiplyBy 3) ;; fails with unable to resolve symbol multiplyBy
(create-times-macro "multiplyBy" 3)
(multiplyBy 3) ;; same failure