你能在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
列表会先恢复项目顺序,然后将其预先添加到列表中?
答案 0 :(得分:7)
into
使用conj
将项目添加到源集合中。 conj
将项目添加到前面以获取列表,并将项目添加到矢量末尾。 Clojure列表是不可变的单链表,因此添加到列表的末尾将是O(n)操作。前面的插入是一个恒定时间操作。