我知道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