【问题标题】:Why every? function returns true with empty vector in Clojure? [duplicate]为什么每个?函数在 Clojure 中以空向量返回 true? [复制]
【发布时间】:2017-05-15 05:33:34
【问题描述】:

我遇到了这种奇怪的行为:

(every? true? [])
=> true

(every? false? [])
=> true

(every? odd? [])
=> true

列表是这样的......

我猜它应该返回 false 而不是 true

这样设计这个功能的原因是什么?

【问题讨论】:

  • 您能否指定[] 中的哪些数字不是odd?,不是false?,也不是true?,这是every? 返回@987654327 所需要的@ 结果呢?
  • “非arg参数”是什么意思?可以在不改变问题含义的情况下将其更改为“空”吗?
  • @ArthurUlfeldt 你是对的!改了标题。

标签: clojure functional-programming lisp clojurescript


【解决方案1】:

在大多数具有every?not-any? 等函数的语言中,一般规则是在给定一个空数组时返回标识值。这可确保在对数组的子集进行组合操作时获得相同的结果。规则是

(and (every? true? array1) (every? true? array2))

应该返回与

相同的东西
(every? true? (concat array1 array2))

如果every? 为空数组返回false,当两个数组中的任何一个为空时,这将破坏等价性。

同样,not-any? 为空数组返回false 以确保

(not-any? true? (concat array1 array2))

相同
(or (not-any? true? array1) (not-any? true? array2))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-08
    • 2021-11-10
    • 2020-04-12
    • 2015-02-24
    • 2018-01-28
    • 2014-12-20
    • 2011-12-14
    相关资源
    最近更新 更多