查看源代码every?可以明确原因
(every? string? []) => true
Run Code Online (Sandbox Code Playgroud)
这是因为every?以递归方式实现并用于(nil? (seq coll))结束递归.但是,我的问题是,这种行为有何意义?刚刚绊倒了.
我已经解决了我的问题
(and (seq x) (every? string? x))
Run Code Online (Sandbox Code Playgroud)
因为它的功能与forall-quantifier相同.也就是说,它最初被假定为真,并且谓词的每个应用都试图证明它是错误的.存在量词(由于不一致而被称为some而不是any?在Clojure中)以相反的方式工作 - 它假定为假,并且谓词的每个应用都试图证明它是真的.
换句话说,对于所有人来说,某些事情都是真的总是如此,并且对于某些人来说,某些事情是真的总是错误的.
它在数学上是如此定义的,这是有充分理由的.如果every?以任何其他方式定义,那将是一致性灾难.
使用当前定义,every? foo当且仅当所有连接集合也满足时,连接的结果才满足every? foo.使every?收益false上的空列表会打破这种方便的等价和其他主机(例如去除一个元素,有时会导致切换every?从true到false.)
| 归档时间: |
|
| 查看次数: |
284 次 |
| 最近记录: |