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 - Fatal编程技术网

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