i测试一些列表操作,找到两个语法。
的差异(conj (cons 321321 [1]) 123123123)
=> (123123123 321321 1)
和
(cons 321321 [1])
=> (321321 1)
(conj [321312 1] 123123123)
=> [321312 1 123123123]
为什么这些结果不相等?
因为您正在做不同的事情。
cons
http://clojurecs.org/clojure.core/cons
返回一个新的SEQ,其中x是第一个元素,而seq是 其余的。
conj
http://clojurecs.org/clojure.core/conj
用XS返回一个新系列 '添加'。(conj nil项目)返回(项目)。"加法"可能 根据混凝土类型的不同。
在您的第一个示例中,您是"准备"一个新的条目(Conj添加到序列的最简单方法),在您的第二个示例中,您将"附加"附加"到向量(再次使Conj添加最简单的方法)。<<<<<<<<<<<<<</p>
user=> (.getClass (cons 321321 [1]))
clojure.lang.Cons
user=> (.getClass (conj (cons 321321 [1]) 123123123))
clojure.lang.Cons
注意您正在使用[...]
Next!
user=> (.getClass [321312 1])
clojure.lang.PersistentVector
user=> (.getClass (conj [321312 1] 123123123))
clojure.lang.PersistentVector