4

是否可以为 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])
4

2 回答 2

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
于 2013-11-01T03:46:59.023 回答
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])
于 2013-11-01T03:40:05.913 回答