首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >seq,序贯函数之间有什么区别?柯尔呢?

seq,序贯函数之间有什么区别?柯尔呢?
EN

Stack Overflow用户
提问于 2014-03-16 15:59:52
回答 2查看 2.8K关注 0票数 25

seq函数之间的区别是什么?有顺序的?柯尔呢?

我发现一些信息分散在互联网上,但我认为最好将这些信息集中在这里。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-16 16:43:11

seq?是一个谓词,如果它的参数实现了ISeq接口,则返回true,也就是说,它提供了方法firstrestcons。见http://clojure.org/sequences

代码语言:javascript
复制
(seq? [1 2])
false
(seq? (seq [1 2]))
true

sequential?是一个谓词,如果它的参数实现了Sequential接口,它将返回true。Sequential是一个标记接口(没有方法),它保证集合可以按定义的顺序迭代(例如,列表,而不是映射)。

代码语言:javascript
复制
(sequential? [])
true
(sequential? {})
false

coll?是一个谓词,如果它的参数包含IPersistentCollection,则返回true。例如,clojure数据结构将返回true,而本机java数据结构则不会:

代码语言:javascript
复制
(coll? {:a 1})
true
(coll? (java.util.HashMap.))
false
票数 29
EN

Stack Overflow用户

发布于 2014-03-16 16:40:13

  • seq?对于任何序列都是正确的。
  • 对于任何顺序(而不是关联的)集合,sequential?都是正确的。
  • 对于任何Clojure集合,coll?都是正确的。

seq?暗示着sequential?暗示着coll?

代码语言:javascript
复制
=> ((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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22439174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档