我有以下序列
(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
)来获得向量结果.
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)