代码之家  ›  专栏  ›  技术社区  ›  Ertuğrul Çetin

为什么每一个?函数在Clojure中使用空向量返回true?[副本]

  •  2
  • Ertuğrul Çetin  · 技术社区  · 8 年前

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

    (every? true? [])
    => true
    
    (every? false? [])
    => true
    
    (every? odd? [])
    => true
    

    列表是这样的。。。

    它应该会回来 假的 而不是 真的 我想。

    该功能如此设计的原因是什么?

    1 回复  |  直到 8 年前
        1
  •  9
  •   Barmar    8 年前

    大多数语言中的一般规则是 every? not-any? 当给定空数组时,它们返回标识值。这确保在组合数组子集上的操作时获得相同的结果。规则是:

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

    应该返回与相同的东西

    (every? true? (concat array1 array2))
    

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

    类似地, 没有? 返回 假的 对于空数组,确保

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

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