seq的功能有什么区别?顺序?和柯?
我发现一些信息散布在整个互联网上,但我认为最好将这些信息集中在这里。
答案 0 :(得分:25)
seq?
是一个谓词,如果它的参数实现ISeq
接口,则返回true,也就是说它提供方法first
,rest
,cons
。见http://clojure.org/sequences。
(seq? [1 2])
false
(seq? (seq [1 2]))
true
sequential?
是一个谓词,如果它的参数实现了Sequential
接口,则返回true。 Sequential
是一个标记接口(没有方法),并且是一个承诺,可以按照定义的顺序(例如列表,但不是地图)迭代集合。
(sequential? [])
true
(sequential? {})
false
coll?
是一个谓词,如果其参数包含IPersistentCollection
,则返回true。因此,例如,clojure数据结构将返回true,而本机java数据结构将不会:
(coll? {:a 1})
true
(coll? (java.util.HashMap.))
false
答案 1 :(得分:8)
seq?
适用于任何序列。sequential?
适用于任何顺序(非关联)
集合。coll?
适用于任何Clojure系列。 seq?
暗示sequential?
暗示coll?
=> ((juxt seq? sequential? coll?) ()) ; [true true true]
=> ((juxt seq? sequential? coll?) []) ; [false true true]
=> ((juxt seq? sequential? coll?) #{}); [false false true]
不准确:sequential?
纯粹按惯例与其他人相关 - 请参阅Kevin's answer。