我有功能:
(defn parse-file [stream map-filter]
(->> (xml/parse stream)
(:content)
(func args1)
(func args2)
(func args3)
(attrs)))
我希望带有名为“func”的函数的表达式由宏生成 这是:
(defmacro gen-macro [map-filter seq]
`(~@(map #(list 'another-func % %2 seq) map-filter)))
但它返回((func args1) (func args2) (func args2))
如何在生成表达式时删除外括号?
答案 0 :(得分:1)
听起来您希望将gen-macro
生成的列表拼接到parse-file
函数的主体中。除非您将parse-file
转换为宏,否则您将无法将语法拼接到其正文中。
但是,您仍然可以获得所需的功能。您只需稍微修改gen-macro
:
(defmacro gen-macro [map-filter seq]
`(fn [x#] (->> x# ~@(map #(list 'another-func % %2) seq map-filter))))