从示例和对 Clojuredoc 的功能的评论中, 每个?
user> (every? true? '()) ;empty is true?
true
user> (every? false? '()) ;empty is false?
true
这确实很奇怪,而且可能不合逻辑,因为我认为上述两者都是错误的。有人可以阐明这背后的基本原理吗?
我们有 3 种可能的情况,一次只有一种适用于集合。
现在,如果您考虑为空列表返回 false ,也会感觉很奇怪,因为当 coll 中的至少一项未通过谓词但对于未发生的空列表时返回 false 。
我认为为空 coll 选择 true 的合理性是基于这样一个事实,即在现实世界中适用的情况比没有意义的情况更多。例如:有人给了我一个 URL 列表,我需要返回他们下载的内容,现在我的函数首先要验证每个 URL 的格式是否正确,然后使用 map 或 pmap 下载 URL -
(if (every? url? urls) (map download urls) (throw "Invalid url found"))
这个以及更多此类示例将使序列的工作更加无缝。
另一方面,我是一个静态类型语言的人(比如 Haskell),并且更喜欢使用类型来解决这个问题。而不是返回一个真或假,我希望这个函数返回Maybe bool
这样的:
Just True
Just False
Nothing