如何定义返回要在其中使用的表达式的宏 - >>宏?

时间:2013-10-08 13:39:12

标签: clojure

我有功能:

(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))
如何在生成表达式时删除外括号?

1 个答案:

答案 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))))