2012-07-19 49 views
10

我有以下序列如何在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] 

是否有可用做一个标准功能所以?或者,这么做是一种很好的习惯方式?

+0

在功能编程平行理解的特定行为通常被描述为“压缩和解”。一些功能语言具有单独的“zip”功能,可以与“地图”结合使用,而其他语言提供“zipmap”功能(有时仅称为“地图”)。 Clojure属于后一种情况。 – Aaron 2012-08-17 17:49:43

回答

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)。

+3

+1使用短语“将[序列]倒入...” – Ashe 2012-07-20 00:13:22

15

如果使用的Clojure-1.4.0或以上,则可以使用mapv

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