Clojure 如何定义返回要在->;中使用的表达式的宏&燃气轮机;宏?
我有以下职能:Clojure 如何定义返回要在->;中使用的表达式的宏&燃气轮机;宏?,clojure,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]
(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))
如何在生成表达式时删除外圆括号 听起来您想将
gen宏
生成的列表拼接到解析文件
函数的主体中。除非将解析文件
也转换为宏,否则将无法将语法拼接到其主体中
但是,您仍然可以获得所需的功能。您只需稍微修改一下gen宏
:
(defmacro gen-macro [map-filter seq]
`(fn [x#] (->> x# ~@(map #(list 'another-func % %2) seq map-filter))))
听起来您想将
gen宏
生成的列表拼接到解析文件
函数的主体中。除非将解析文件
也转换为宏,否则将无法将语法拼接到其主体中
但是,您仍然可以获得所需的功能。您只需稍微修改一下gen宏
:
(defmacro gen-macro [map-filter seq]
`(fn [x#] (->> x# ~@(map #(list 'another-func % %2) seq map-filter))))