Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 为什么向量上的concat计算为列表?_Clojure - Fatal编程技术网

Clojure 为什么向量上的concat计算为列表?

Clojure 为什么向量上的concat计算为列表?,clojure,Clojure,对向量调用concat将返回一个列表。作为一个完全的noob,我希望结果也是一个向量。为什么要转换为列表 例如: user=> (concat [1 2] [3 4] [5 6]) (1 2 3 4 5 6) ; Why not: [1 2 3 4 5 6] ? concat返回一个惰性序列 user=> (doc concat) ------------------------- clojure.core/concat ([] [x] [x y] [x y & zs])

对向量调用concat将返回一个列表。作为一个完全的noob,我希望结果也是一个向量。为什么要转换为列表

例如:

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

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]

into使用瞬变,因此速度非常快。

还有
vec
用于性能非常相似的稍短代码。我相信“为什么”是因为它返回一个LazySeq,而不是真正的列表。此外,Clojure向量并不懒惰。请参阅。
concat
仅返回其
doc
中提到的序列。正如Michal已经提到的,您可以将
concat
的结果发送到
vec
函数,返回向量:
(vec(concat[1 2][3 4][5 6])
(感谢您@Mars的建议)