clojure宏扩展重复代码

clojure macro expand repeated code

我一直在尝试用 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、repeat、quoting 等尝试了很多东西...由于我现阶段对 clojure 的理解有限,但没有取得太大成功

谢谢大家!

作为宏 return 的单一形式,您不能制作 my-magic-macro return 多个参数副本以供 my-func 使用。但是,您可以包含 my-func 作为 my-magic-macro 的参数,并进行完整调用 returned:

(defmacro my-magic-macro [func arg n] `(~func ~@(repeat n arg)))