9

我有以下序列

(def a [1 2 3 4])
(def b [10 20 30 40])
(def c [100 200 300 400])

我想逐个元素地组合序列:

(...  + a b c)

给我:

[111 222 333 444]

是否有可用的标准功能来做到这一点?或者,什么是一种好的惯用方式?

4

2 回答 2

15

如果您使用 clojure-1.4.0 或更高版本,您可以使用mapv

user> (mapv + [1 2 3 4] [10 20 30 40] [100 200 300 400])
[111 222 333 444]
于 2012-07-20T00:52:34.517 回答
14

您正在寻找的功能是map.

(map + [1 2 3 4] [10 20 30 40] [100 200 300 400])
;=> (111 222 333 444)

请注意,它map返回一个惰性序列,而不是您的示例中显示的向量。into但是您可以使用该函数将惰性序列倒入空向量中。

(into [] (map + [1 2 3 4] [10 20 30 40] [100 200 300 400]))
;=> [111 222 333 444]

此外,(为了完整性,正如另一个答案中所述)在 Clojure 1.4.0+ 中,您可以使用mapv(具有与 相同的参数map)以获得向量结果。

于 2012-07-20T00:02:00.170 回答