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