我很难尝试用clojure宏做一些基本的东西。我将我的例子简化为最小化。假设我有:
(def a {:i 0})
我想将b定义为:
(def b (my-func a a a a a a ... a a a a))
在编译时,我知道我想要多少a
(例如3)。但是为了删除代码冗余,并且为了更好的代码,我想参数化a
的数量。我想要像:
(def b (my-func (some-magic-macro 3 a)))
将扩展为
(def b (my-func a a a))
尝试使用macrodef,重复,引用等一系列事情......由于我在现阶段对clojure的理解有限而没有多少成功
谢谢大家!
答案 0 :(得分:4)
当宏返回单个表单时,您无法使my-magic-macro
返回my-func
要使用的参数的多个副本。但是,您可以将my-func
作为参数添加到my-magic-macro
,并返回完整的调用:
(defmacro my-magic-macro [func arg n] `(~func ~@(repeat n arg)))