2015-05-06 32 views
0

我測試一些列表操作,發現有兩個語法這種差異。Clojure的列表操作結果不等於

(conj (cons 321321 [1]) 123123123) 
=> (123123123 321321 1) 

(cons 321321 [1]) 
=> (321321 1) 
(conj [321312 1] 123123123) 
=> [321312 1 123123123] 

爲什麼這些結果不等於?

回答

8

因爲你在做不同的事情。

conshttp://clojuredocs.org/clojure.core/cons

返回一個新的SEQ其中x是所述第一元件和seq是 其餘部分。

conjhttp://clojuredocs.org/clojure.core/conj

返回與XS 一個新的集合 '添加'。 (連接項目)返回(項目)。 的「除了」可以 發生在根據具體類型的不同「位置」。

在你的第一個例子

你「前面加上」新的條目,並在你的「追加」爲載體的第二個例子(爲連詞再次最簡單的方式(對於連詞添加到序列最簡單的方法)加)。

user=> (.getClass (cons 321321 [1])) 
clojure.lang.Cons 
user=> (.getClass (conj (cons 321321 [1]) 123123123)) 
clojure.lang.Cons 

請注意,您正在使用[...]接下來!

user=> (.getClass [321312 1]) 
clojure.lang.PersistentVector 
user=> (.getClass (conj [321312 1] 123123123)) 
clojure.lang.PersistentVector 
+0

謝謝,(conj(seq [1 2 3])4),這個例子是你的解釋 – SamPeng