为什么矢量的concat评估为列表?

时间:2010-04-26 00:23:05

标签: clojure

在矢量上调用concat会返回一个列表。作为一个总的菜鸟我会期望结果也是一个矢量。为什么要转换成列表?

示例:

user=> (concat [1 2] [3 4] [5 6])
(1 2 3 4 5 6)
; Why not: [1 2 3 4 5 6] ?

1 个答案:

答案 0 :(得分:36)

concat返回一个懒惰的序列。

user=> (doc concat)
-------------------------
clojure.core/concat
([] [x] [x y] [x y & zs])
  Returns a lazy seq representing the concatenation of the elements in the supplied colls.

您可以将其转换回带有以下内容的矢量:

user=> (into [] (concat [1 2] [3 4] [5 6]))
[1 2 3 4 5 6]

使用瞬态,所以它很快就可以了。