进入Clojure中的列表与向量

时间:2015-10-04 17:06:09

标签: data-structures clojure functional-programming

你能在Clojure中解释这种行为吗?

user=> (into [1 2 3] ["a" "b"])
[1 2 3 "a" "b"]

但是

user=> (into '(1 2 3) ["a" "b"])
("b" "a" 1 2 3)

可以理解的是,into带有向量会附加项目,但为什么使用into列表会先恢复项目顺序,然后将其预先添加到列表中?

1 个答案:

答案 0 :(得分:7)

into使用conj将项目添加到源集合中。 conj将项目添加到前面以获取列表,并将项目添加到矢量末尾。 Clojure列表是不可变的单链表,因此添加到列表的末尾将是O(n)操作。前面的插入是一个恒定时间操作。