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

「配列のすべての要素が条件を満たすなら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 on 2023年06月03日 11時37分 (#4471172)

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

        親コメント
        • by Anonymous Coward

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

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

          • by Anonymous Coward

            > 空集合はすべての集合の部分集合であると定義されているので、

            勝手に仕様を書き足してんじゃねえよクソが。

            • by Anonymous Coward

              俺はゼロで割ってはいけないなんて知らなかった!仕様に書いとけクソが!
              なんてプログラマにとっての常識を持ち合わせてませんってな自己アピールして良いことありそう?

        • by Anonymous Coward

          明示的な仕様を決める人がこういった背景を理解しているのならば、この関数(関数Fとする)を必ず空集合の入力にtrueを戻す設計にするでしょう。それが常識的な動作であり、当然そうなると皆が期待している。

          計算機は本質的に数学の問題を解く機械であり、数学の法則に従った設計が最も効率が良くなる。たとえば、関数Fを実装するとき中でライブラリ関数を呼び出すとしたら、空配列の場合の特別な分岐処理は不要で、中でそのままライブラリ関数を呼び出すだけで良くなる。
          もしも関数Fを呼び出す関数(関数G)が、関数Fが空の配列の場合にtrueが戻すのが都合が悪い場合、関数GはFを呼ぶ前にその特別な処理に移行すればよい。関数Gが、関数Fが空の配列の場合にtrueを戻す動作が都合が良い場合そのままFを呼び出せばよい。Fの中で例外をthrowし、Gがそれをcatchする設計は、全体として一般的なやり方ではないから読みにくいし、動作効率の面で問題が起きる場合がある。

          • by Anonymous Coward

            書いてないことを勝手に読み取ると、多くの人が迷惑する。仕様が間違ってるとしても、それに依拠している人がいるんだから、それに従わないと。

吾輩はリファレンスである。名前はまだ無い -- perlの中の人

処理中...