如何在clojure中组合序列?
我有以下序列如何在clojure中组合序列?,clojure,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] 是否有标准功能可用于此操作?或者,什么是一种好的惯用方法呢?您正在寻找的函数是 请注意,map返回一个惰性序列,而不是示例中所示的向量。但是您可以使用函数将惰性序列倒进一个空向量中 (into [] (map + [1 2 3 4] [10 20 3
(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]
是否有标准功能可用于此操作?或者,什么是一种好的惯用方法呢?您正在寻找的函数是 请注意,
map
返回一个惰性序列,而不是示例中所示的向量。但是您可以使用函数将惰性序列倒进一个空向量中
(into [] (map + [1 2 3 4] [10 20 30 40] [100 200 300 400]))
;=> [111 222 333 444]
此外,(为了完整性,正如在另一个答案中所指出的),在Clojure 1.4.0+中,您可以使用
mapv
(使用与map
相同的参数)以获得向量结果。如果您使用Clojure-1.4.0或更高版本,您可以使用mapv
:
user> (mapv + [1 2 3 4] [10 20 30 40] [100 200 300 400])
[111 222 333 444]
函数式编程中的特殊并行理解行为通常被描述为“压缩”。一些函数式语言具有单独的“zip”函数,可以与“map”结合使用,而其他语言则提供“zipmap”函数(有时仅称为“map”)。Clojure属于后一种情况。
user> (mapv + [1 2 3 4] [10 20 30 40] [100 200 300 400])
[111 222 333 444]