应用地图组合 - 不按预期工作

时间:2012-05-10 11:07:37

标签: clojure mapreduce

在repl添加中,交叉向量按预期工作

> (map + [1 2 3] [1 2 3])
(2 4 6)

但我所拥有的是矢量矢量,当我尝试

> (apply #(map + %) [[1 2 3] [1 2 3]])
ArityException Wrong number of args (2) passed to: user$eval14$fn clojure.lang.AFn.throwArity (AFn.java:437)

如何在向量的向量中添加相应的数字?

2 个答案:

答案 0 :(得分:6)

这只是你的第一个例子的一步:

user> (apply map + [[1 2 3] [1 2 3]])
(2 4 6)

答案 1 :(得分:0)

读者宏方法可以使用:

(user=> (apply #(map + % %2) [[1 2 3] [1 2 3]])
(2 4 6)

它要求您知道向量中有多少向量,并指定每个arg。如果“应用”方法适合您,那么它将更加灵活,例如:

user=> (apply map + [[1 2 3] [1 2 3] [1 2 3]])
(3 6 9)