我有以下序列
(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]
是否有标准功能可以这样做?或者,这样做的好习惯是什么?
答案 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]