パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

「配列のすべての要素が条件を満たすならtrueを返す」関数に空配列を渡したらtrueかfalseか?」記事へのコメント

  • 「配列のすべての要素が条件を満たすならtrueを返す」と書かれているということは、
    前提としてはfalseであり、「条件を満たさない限りtrueにはならない」のである。
    簡単に言えばホワイトリスト式ということだ。よって、空配列を渡すと条件を満たす
    ことがないのでfalseになるのが正解である。

    対して、これが「配列のいずれかの要素が条件を満たさないならfalseを返す」
    だった場合、ブラックリスト式なので、前提としてtrueであり、「条件を満たさない
    要素があった場合のみfalseになる」ので、空配列を渡すと、条件を満たさないことが
    ないので「true」になる。

    いいプログラマは、こういう論理の落とし穴を理解してうまく対処できるプログラマ
    である。

    • by Anonymous Coward

      関数の仕様は空集合の入力においてvacuously trueの原則に従います。
      ・JavaScriptのarrayのanyメソッドは、空の配列に対してはあらゆる条件でtrueを戻す。
      ・Pythonのall関数は、空のリストに対してはあらゆる条件でtrueを戻す。
      ・RustのIterator::all関数は、ゼロ要素の場合あらゆるpredicatorでtrueを戻す。

      空の配列を入力してfalseを戻す関数というのは、一般的な常識から考えて全く予想外の動作であり、
      無用な混乱を呼ぶので避けた方が良いと思う。

      • by Anonymous Coward

        その原則は明示的な仕様がない場合の話で、明確に定義されてるんだから、そこに従わざるを得ない。

        • by Anonymous Coward

          「配列のすべての要素が条件を満たすならtrueを返す」という条件なら、空の配列を渡せば数学的には疑問の余地なくTrueになる。
          空集合はすべての集合の部分集合であると定義されているので、仮に空集合がFalseになるなら、どのような集合を入力する場合でもFalseになってしまうので。

          あとはプログラミング言語の方言というか、経験的な物がどうかという点だが、その点でも普通はTrueだというのが前のコメント。

アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家

処理中...