seq函数之间的区别是什么?有顺序的?柯尔呢?
我发现一些信息分散在互联网上,但我认为最好将这些信息集中在这里。
发布于 2014-03-16 16:43:11
seq?是一个谓词,如果它的参数实现了ISeq接口,则返回true,也就是说,它提供了方法first、rest、cons。见http://clojure.org/sequences。
(seq? [1 2])
false
(seq? (seq [1 2]))
truesequential?是一个谓词,如果它的参数实现了Sequential接口,它将返回true。Sequential是一个标记接口(没有方法),它保证集合可以按定义的顺序迭代(例如,列表,而不是映射)。
(sequential? [])
true
(sequential? {})
falsecoll?是一个谓词,如果它的参数包含IPersistentCollection,则返回true。例如,clojure数据结构将返回true,而本机java数据结构则不会:
(coll? {:a 1})
true
(coll? (java.util.HashMap.))
false发布于 2014-03-16 16:40:13
seq?对于任何序列都是正确的。sequential?都是正确的。coll?都是正确的。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。
https://stackoverflow.com/questions/22439174
复制相似问题