是否可以为 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])
是否可以为 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])
这解决了问题:
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
使用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])