如何在Clojure中将可变参数传递给匿名函数?

5

在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个回答

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

非常感谢你,Guillermo! - jeemar

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接