Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 在宏中展开宏_Clojure_Macros - Fatal编程技术网

Clojure 在宏中展开宏

Clojure 在宏中展开宏,clojure,macros,Clojure,Macros,我有以下宏: (defmacro add-children [this children] (map (fn [child] (list '.addChild this child)) children)) 我想创建以下宏: (defmacro defgom [name & body] (let [sym (gensym)] `(let [~sym (Model.)] (add-children sym body))))) 考虑到该模型是一个带有addChild函

我有以下宏:

(defmacro add-children [this children]
  (map (fn [child] (list '.addChild this child)) children))
我想创建以下宏:

(defmacro defgom [name & body]
 (let [sym (gensym)]
  `(let [~sym (Model.)]
     (add-children sym body)))))
考虑到该模型是一个带有
addChild
函数的Java类。我想将
defgom
扩展到

(let [*gensym* (Model.)]
  (.addChild *gensym* (first body))
  (.addChild *gensym* (second body))
  ...
  (.addChild *gensym* (last body)))
计算时,
addchildren
宏给出正确的结果(
.addchildren
的列表)。但我无法在
defgom
宏中计算它。我得到一个“不知道如何从clojure.lang.Symbol创建ISeq”。我尝试了
~
~@
(假设
添加子项
返回一个列表),但都没有成功

如何在宏内部正确展开宏


PS:我知道我可以用一个函数而不是“添加子项”宏来完成,但我想知道是否可以用宏来完成。

只需将最后一行更改为:

(add-children ~sym ~@body)

只需将最后一行更改为:

(add-children ~sym ~@body)