如何在clojure中组合序列?

zet*_*ish 10 clojure

我有以下序列

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

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

(...  + a b c)
Run Code Online (Sandbox Code Playgroud)

给我:

[111 222 333 444]
Run Code Online (Sandbox Code Playgroud)

有标准功能吗?或者,这样做有什么好的惯用方法?

Jer*_*emy 15

你正在寻找的功能是map.

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

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

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

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

  • +1使用短语"将[序列]倒入..." (3认同)

num*_*_cn 15

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

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