如何在clojure中组合序列?

时间:2012-07-19 23:58:39

标签: clojure

我有以下序列

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

是否有标准功能可以这样做?或者,这样做的好习惯是什么?

2 个答案:

答案 0 :(得分:15)

您正在寻找的功能是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具有相同的参数)以获得向量结果

答案 1 :(得分:15)

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

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