Clojure - 为什么使用列表而不是向量表现不同?

Sam*_*son 2 clojure

into当插入的集合不同时,为什么表现不同?例如:

user=> (into [] [1 2 3])
[1 2 3]
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.正如我所料.然而:

user=> (into () [1 2 3])
(3 2 1)
Run Code Online (Sandbox Code Playgroud)

为什么这会颠倒争论?我认为它是为了性能,并且项目是按顺序插入的cons?这仍然似乎打破了我的抽象,在两个不同类型的有序集合中我期望结果一致地排序.

Mar*_*her 7

intoconjseq在一起.

conj在开头添加列表,并在结尾处添加向量以提高效率,以便不添加任何类型以便添加到它.

Clojure中讨论Collection抽象时,在Clojure 编程中很好地解释了这一点:

这些函数(conj/seq/count/empty/=)对于正在操作的具体集合类型都是多态的.换句话说,每个操作提供与每个数据结构实现的约束一致的语义.