2015-10-04 29 views
3

你可以在Clojure中解釋這種行爲嗎?轉化爲列表與在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用列表的第一恢復的項目訂單,然後將其預先考慮到列表中?

回答

7

into使用conj將項目添加到源集合中。 conj將項目追加到列表的前面,並追加到向量的結尾。 Clojure列表是不可變的單鏈表,所以添加到列表的末尾將是一個O(n)操作。在前面插入是一個恆定時間的操作。