2014-04-04 79 views
3

我正在嘗試一些Clojure,但現在對「連詞」的行爲感到困惑。 請參閱下面的示例:連詞的奇怪行爲

user=> (conj [1 2 3] 4) 
[1 2 3 4] 

以上是預計的。 但現在,如果我做以下:

user=> (conj (reverse [1 2 3]) 4) 
(4 3 2 1) 

它返回(4 3 2 1)。但我想它應該已經返回(3 2 1 4)。那麼,我在這裏錯過了什麼?

+1

的可能重複(http://stackoverflow.com/questions/7437833/inconsistency-with-clojures-sequences) – amalloy

回答

7

reverse返回一個列表。

(reverse [1 2 3]) 
=> (3 2 1) 

conj具有儘可能便宜地向集合添加內容的行爲。對於矢量,它將被追加。對於列表,它會預先等待。

例如:

(conj '(1 2 3) 4) 
=> (4 1 2 3) 
+0

從文檔[用Clojure的序列不一致?]:HTTP ://clojuredocs.org/clojure_core/clojure.core/conj「根據具體的類型,'addition'可能會在不同的'地點'發生。」 「。 –