如何将var args传递给Clojure中的匿名函数?

时间:2013-11-01 03:32:41

标签: clojure

是否可以在Clojure中为匿名函数执行var args?

例如,我该怎么转:

(#(reduce + (map * %1 %2 %3)) [1 2 3] [4 5 6] [7 8 9])

成像,

(#(reduce + (map * [& args])) [1 2 3] [4 5 6] [7 8 9])

2 个答案:

答案 0 :(得分:10)

这解决了这个问题:

 user> ((fn[& args] (reduce + (apply map * args))) [1 2 3] [4 5 6] [7 8 9])
       270

 user> (#(reduce + (apply map * %&)) [1 2 3] [4 5 6] [7 8 9])
       270

答案 1 :(得分:2)

使用apply功能

<击> 我不知道使用#(...)语法执行此操作的方法,但这是使用fn

的示例
((fn [& args] (reduce + (apply map * args))) [1 2 3] [4 5 6] [7 8 9])

<击>

您可以使用%&#(...)形式获取其余参数,从而产生

(#(reduce + (apply map * %&)) [1 2 3] [4 5 6] [7 8 9])