Clojure列表操作结果不相等



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

最新更新