我有以下序列如何在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]
是否有可用做一个标准功能所以?或者,这么做是一种很好的习惯方式?
我有以下序列如何在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
。
(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使用短语“将[序列]倒入...” – Ashe 2012-07-20 00:13:22
如果使用的Clojure-1.4.0或以上,则可以使用mapv
:
user> (mapv + [1 2 3 4] [10 20 30 40] [100 200 300 400])
[111 222 333 444]
在功能编程平行理解的特定行为通常被描述为“压缩和解”。一些功能语言具有单独的“zip”功能,可以与“地图”结合使用,而其他语言提供“zipmap”功能(有时仅称为“地图”)。 Clojure属于后一种情况。 – Aaron 2012-08-17 17:49:43