アカウント名:
パスワード:
「配列のすべての要素が条件を満たすならtrueを返す」と書かれているということは、前提としてはfalseであり、「条件を満たさない限りtrueにはならない」のである。簡単に言えばホワイトリスト式ということだ。よって、空配列を渡すと条件を満たすことがないのでfalseになるのが正解である。
対して、これが「配列のいずれかの要素が条件を満たさないならfalseを返す」だった場合、ブラックリスト式なので、前提としてtrueであり、「条件を満たさない要素があった場合のみfalseになる」ので、空配列を渡すと、条件を満たさないことがないので「true」になる。
いいプログラマは、こういう論理の落とし穴を理解してうまく対処できるプログラマである。
関数の仕様は空集合の入力においてvacuously trueの原則に従います。・JavaScriptのarrayのanyメソッドは、空の配列に対してはあらゆる条件でtrueを戻す。・Pythonのall関数は、空のリストに対してはあらゆる条件でtrueを戻す。・RustのIterator::all関数は、ゼロ要素の場合あらゆるpredicatorでtrueを戻す。
空の配列を入力してfalseを戻す関数というのは、一般的な常識から考えて全く予想外の動作であり、無用な混乱を呼ぶので避けた方が良いと思う。
その原則は明示的な仕様がない場合の話で、明確に定義されてるんだから、そこに従わざるを得ない。
「配列のすべての要素が条件を満たすならtrueを返す」という条件なら、空の配列を渡せば数学的には疑問の余地なくTrueになる。空集合はすべての集合の部分集合であると定義されているので、仮に空集合がFalseになるなら、どのような集合を入力する場合でもFalseになってしまうので。
あとはプログラミング言語の方言というか、経験的な物がどうかという点だが、その点でも普通はTrueだというのが前のコメント。
> 空集合はすべての集合の部分集合であると定義されているので、
勝手に仕様を書き足してんじゃねえよクソが。
俺はゼロで割ってはいけないなんて知らなかった!仕様に書いとけクソが!なんてプログラマにとっての常識を持ち合わせてませんってな自己アピールして良いことありそう?
> プログラマにとって違います。数字を扱うすべての人にとって、です。仕様書に1+1=2と書いとけ!みんなが判ると思うな!というぐらいに情けない話でしょう。数字を扱わないならまあ……知らなくてもいいですかね。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲはアレゲを呼ぶ -- ある傍観者
迷う余地などなく「false」を返すのが正しい。 (スコア:0)
「配列のすべての要素が条件を満たすならtrueを返す」と書かれているということは、
前提としてはfalseであり、「条件を満たさない限りtrueにはならない」のである。
簡単に言えばホワイトリスト式ということだ。よって、空配列を渡すと条件を満たす
ことがないのでfalseになるのが正解である。
対して、これが「配列のいずれかの要素が条件を満たさないならfalseを返す」
だった場合、ブラックリスト式なので、前提としてtrueであり、「条件を満たさない
要素があった場合のみfalseになる」ので、空配列を渡すと、条件を満たさないことが
ないので「true」になる。
いいプログラマは、こういう論理の落とし穴を理解してうまく対処できるプログラマ
である。
Re: (スコア:0)
関数の仕様は空集合の入力においてvacuously trueの原則に従います。
・JavaScriptのarrayのanyメソッドは、空の配列に対してはあらゆる条件でtrueを戻す。
・Pythonのall関数は、空のリストに対してはあらゆる条件でtrueを戻す。
・RustのIterator::all関数は、ゼロ要素の場合あらゆるpredicatorでtrueを戻す。
空の配列を入力してfalseを戻す関数というのは、一般的な常識から考えて全く予想外の動作であり、
無用な混乱を呼ぶので避けた方が良いと思う。
Re: (スコア:0)
その原則は明示的な仕様がない場合の話で、明確に定義されてるんだから、そこに従わざるを得ない。
Re: (スコア:0)
「配列のすべての要素が条件を満たすならtrueを返す」という条件なら、空の配列を渡せば数学的には疑問の余地なくTrueになる。
空集合はすべての集合の部分集合であると定義されているので、仮に空集合がFalseになるなら、どのような集合を入力する場合でもFalseになってしまうので。
あとはプログラミング言語の方言というか、経験的な物がどうかという点だが、その点でも普通はTrueだというのが前のコメント。
Re: (スコア:0)
> 空集合はすべての集合の部分集合であると定義されているので、
勝手に仕様を書き足してんじゃねえよクソが。
Re: (スコア:0)
俺はゼロで割ってはいけないなんて知らなかった!仕様に書いとけクソが!
なんてプログラマにとっての常識を持ち合わせてませんってな自己アピールして良いことありそう?
Re: (スコア:0)
> プログラマにとって
違います。数字を扱うすべての人にとって、です。
仕様書に1+1=2と書いとけ!みんなが判ると思うな!というぐらいに情けない話でしょう。
数字を扱わないならまあ……知らなくてもいいですかね。
Re:迷う余地などなく「false」を返すのが正しい。 (スコア:1)
// 数学からすると 1+1 = 0か1か2か