我知道cons
返回一個seq,而conj
返回一個集合。我也知道conj
會將該項目「添加」到該集合的最佳結尾,並且cons
總是將該項目「添加」到前面。這個例子說明了這兩點:Clojure:cons(seq)vs. conj(list)
user=> (conj [1 2 3] 4) //returns a collection
[1 2 3 4]
user=> (cons 4 [1 2 3]) //returns a seq
(4 1 2 3)
對於向量,地圖和設置這些差異對我而言是有意義的。但是,對於清單,它們看起來完全相同
user=> (conj (list 3 2 1) 4) //returns a list
(4 3 2 1)
user=> (cons 4 (list 3 2 1)) //returns a seq
(4 3 2 1)
是否有使用列表,其中conj
與cons
表現出不同的行爲,任何的例子,或者是他們真正的互換?換句話說,是否有一個例子,列表和seq不能等價使用?
這是多麼美妙的文章!我不知道有一個Cons類型。做得好! – 2010-06-09 21:18:45
謝謝。高興聽到。 :-) – 2010-06-09 21:25:32
順便說一句,作爲一個特殊情況,'(cons foo nil)'返回一個單例PersistentList'(同樣對'conj')。 – 2010-06-09 21:30:02