dev*_*ull 3 functional-programming clojure data-structures
你能在Clojure中解释这种行为吗?
user=> (into [1 2 3] ["a" "b"])
[1 2 3 "a" "b"]
Run Code Online (Sandbox Code Playgroud)
但
user=> (into '(1 2 3) ["a" "b"])
("b" "a" 1 2 3)
Run Code Online (Sandbox Code Playgroud)
可以理解的是,into使用vector附加项目,但为什么into首先使用列表还原项目顺序然后将其预先添加到列表中?
into用于conj将项添加到源集合中.conj将项目附加到前面以获取列表,并将项目附加到矢量.Clojure列表是不可变的单链表,因此添加到列表的末尾将是O(n)操作.前面的插入是恒定时间操作.