アカウント名:
パスワード:
> 「配列のすべての要素が条件を満たすならtrueを返す」関数を定義するとき、> 空の配列を渡したらfalseを返すかtrueを返すか
https://www.perplexity.ai/ [perplexity.ai] :"「配列のすべての要素が条件を満たすならtrueを返す」関数を定義するとき、空の配列を渡した場合、trueを返すべきです123。空の配列は、すべての要素が条件を満たすという要件に反するものではなく、真偽値を返す関数においては、空の配列を渡した場合にtrueを返すことが多いです。また、空集合はあらゆる集合の部分集合であるため、空の配列を渡した場合にfalseを返すと、ある種の矛盾が生じることになります1。ただし、空の配列を渡した場合にfalseを返すという設計もあるため、プログラマーによって異なる場合があります。"
> 空の配列は何も入っておらず、条件を満たすかどうかを比較する「要素」を含んでいない。だからfalseを返すべきではないのか
"空の配列を渡した場合、すべての要素が条件を満たすという要件に反するものではなく、真偽値を返す関数においては、空の配列を渡した場合にtrueを返すことが多いです123。空の配列を渡した場合にfalseを返すという設計もあるため、プログラマーによって異なる場合があります2。空の配列は何も入っておらず、条件を満たすかどうかを比較する「要素」を含んでいないため、空の配列を渡した場合にfalseを返すべきだと考える人もいます45。ただし、空集合はあらゆる集合の部分集合であるため、空の配列を渡した場合にfalseを返すと、ある種の矛盾が生じることになります1。したがって、空の配列を渡した場合にtrueを返すことが一般的です。"
とりあえず、書き込みする前に表示をチェックしないやつは良いプラグラマじゃないついでに言うならせっかくコピーボタンが用意されてるのに、範囲指定で手作業コピペとかやるやつも向いてない
で、説明しても何も『空集合はあらゆる集合の部分集合』って2度も書いてあるだろ『その配列は条件を満たす集合の部分集合か』ってのと同じなんだから空配列はtrueを返しとくのが無難とAI君はいってる
書き込みする前に一度読み返してはいかがか
プラグラマってなんだ?
programmer [llnwd.net]ふつうにプラグラマって聞こえるけど?
əはやる気のないア
書式の破綻と単なる誤字脱字ではレベルが違うという事も分からんのかそのレベルだから内容に関して何かコメントすることまでは出来なかったんだろうな
想像だけど、「すべての要素が条件を満たす」を「条件を満たさない要素を含んでいない」と読み替えて判定するからだと思う。前者は必ず全要素をチェックする必要があるが、後者は1つでも条件を満たさない要素が見つかればその時点でfalseを返せる。そしてこの判定方法だと空集合にはtrueを返す。
でも「すべての要素が」という命題は暗黙に「その集合に属する」という前提を含むから読み変えなくても空集合にはtrueを返すと思います。全要素をチェックする実装方法が持ち込まれて話が替わってると思います。
じゃぁ一つでもfalseだったらfalseを返すという仕様だったら?
一つでもって*1つ以上の要素が*って意味だって分かってる?そんで*0個全ての要素が*の話ししてるのも分かってない?
私は、関数の先頭で入力が空集合の場合はtrueを返すコードを誰もが書くと考える。なぜかというと、他の関数の実装が皆そうなっているから。
この関数を使う人も「空の配列を入れたときtrueを戻す」以外の動作はありえないと誰もが考えるので、動作を誤解して間違った子≃度が書かれるという事は無いので、何も問題は起きない。
長い数学、論理学の経験上、trueにするのが大抵の場合便利ってことですね先人の知恵には敬意を払っておくべきでしょう
false派の意見を見てると空配列は入力エラーって感じなので、それなら例外投げるべきでしょうね
アリストテレスの論理学が空集合を想定してないので現代の述語論理に翻訳するときに気を付けないといけなかったりするやつ
ならばtrue/false関係なく例外投げる方がよくね?
関数に空配列を入れたらtrueを戻すのが普通なのだから、当然、関数を呼び出すコードを書く人もそのような動作を期待してコートを組む。そのように作っておけば関数を作る人も関数を呼び出す人も何の誤解も起こらず問題は起きない。空配列を入れたら例外を戻すような動作は全く風変りであり混乱を生むので良くないと思う。
普通、では無いな
解1.「配列のすべての要素が条件を満たすならtrueを返す」は「配列の要素の1つでも条件を満たさないならfalseを返す」と同義である。空の配列が渡されたとき、条件を満たさない要素の数はゼロでありfalseを返す要件は成立しないため、trueを返す。
解2.「配列のすべての要素が条件を満たすならtrueを返す」は「配列の要素数と条件を満たす要素の数が等しいならtrueを返す」と同義である。空の配列が渡されたとき、条件を満たす要素の数はゼロであり配列の要素数と等しいのでtrueを返す。
「集合Aのすべての要素が条件Pを満たす」を論理式で書くと∀x(x∈A⇒P(x))Aが空集合ならx∈Aは偽だからx∈A⇒P(x)は真、したがって∀x(x∈A⇒P(x))は真
前提Pが偽のとき、P⇒QがどんなQに対しても真であるという古典論理の性質が嫌ならParaconsistent logicとかそれにしたって「偽である」とはならないんじゃないかな
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
計算機科学者とは、壊れていないものを修理する人々のことである
falseじゃないんですか?ちょっと誰か説明して・・・ (スコア:0)
> 「配列のすべての要素が条件を満たすならtrueを返す」関数を定義するとき、
> 空の配列を渡したらfalseを返すかtrueを返すか
https://www.perplexity.ai/ [perplexity.ai] :
"「配列のすべての要素が条件を満たすならtrueを返す」関数を定義するとき、空の配列を渡した場合、trueを返すべきです1
2
3
。空の配列は、すべての要素が条件を満たすという要件に反するものではなく、真偽値を返す関数においては、空の配列を渡した場合にtrueを返すことが多いです。また、空集合はあらゆる集合の部分集合であるため、空の配列を渡した場合にfalseを返すと、ある種の矛盾が生じることになります1
。ただし、空の配列を渡した場合にfalseを返すという設計もあるため、プログラマーによって異なる場合があります。"
> 空の配列は何も入っておらず、条件を満たすかどうかを比較する「要素」を含んでいない。だからfalseを返すべきではないのか
"空の配列を渡した場合、すべての要素が条件を満たすという要件に反するものではなく、真偽値を返す関数においては、空の配列を渡した場合にtrueを返すことが多いです1
2
3
。空の配列を渡した場合にfalseを返すという設計もあるため、プログラマーによって異なる場合があります2
。空の配列は何も入っておらず、条件を満たすかどうかを比較する「要素」を含んでいないため、空の配列を渡した場合にfalseを返すべきだと考える人もいます4
5
。ただし、空集合はあらゆる集合の部分集合であるため、空の配列を渡した場合にfalseを返すと、ある種の矛盾が生じることになります1
。したがって、空の配列を渡した場合にtrueを返すことが一般的です。"
Re:falseじゃないんですか?ちょっと誰か説明して・・・ (スコア:1)
とりあえず、書き込みする前に表示をチェックしないやつは良いプラグラマじゃない
ついでに言うならせっかくコピーボタンが用意されてるのに、範囲指定で手作業コピペとかやるやつも向いてない
で、説明しても何も『空集合はあらゆる集合の部分集合』って2度も書いてあるだろ
『その配列は条件を満たす集合の部分集合か』ってのと同じなんだから空配列はtrueを返しとくのが無難とAI君はいってる
Re: (スコア:0)
書き込みする前に一度読み返してはいかがか
プラグラマってなんだ?
Re: (スコア:0)
programmer [llnwd.net]
ふつうにプラグラマって聞こえるけど?
əはやる気のないア
Re: (スコア:0)
書式の破綻と単なる誤字脱字ではレベルが違うという事も分からんのか
そのレベルだから内容に関して何かコメントすることまでは出来なかったんだろうな
Re: (スコア:0)
想像だけど、「すべての要素が条件を満たす」を「条件を満たさない要素を含んでいない」と読み替えて判定するからだと思う。前者は必ず全要素をチェックする必要があるが、後者は1つでも条件を満たさない要素が見つかればその時点でfalseを返せる。そしてこの判定方法だと空集合にはtrueを返す。
Re: (スコア:0)
でも「すべての要素が」という命題は暗黙に「その集合に属する」という前提を含むから
読み変えなくても空集合にはtrueを返すと思います。
全要素をチェックする実装方法が持ち込まれて話が替わってると思います。
Re: (スコア:0)
じゃぁ一つでもfalseだったらfalseを返すという仕様だったら?
Re: (スコア:0)
一つでもって*1つ以上の要素が*って意味だって分かってる?
そんで*0個全ての要素が*の話ししてるのも分かってない?
直感的に、trueを返すのだと思った (スコア:0)
私は、関数の先頭で入力が空集合の場合はtrueを返すコードを誰もが書くと考える。なぜかというと、他の関数の実装が皆そうなっているから。
この関数を使う人も「空の配列を入れたときtrueを戻す」以外の動作はありえないと誰もが考えるので、動作を誤解して間違った子≃度が書かれるという事は無いので、何も問題は起きない。
Re: (スコア:0)
長い数学、論理学の経験上、trueにするのが大抵の場合便利ってことですね
先人の知恵には敬意を払っておくべきでしょう
false派の意見を見てると空配列は入力エラーって感じなので、それなら例外投げるべきでしょうね
アリストテレスの論理学が空集合を想定してないので現代の述語論理に翻訳するときに気を付けないといけなかったりするやつ
Re: (スコア:0)
ならばtrue/false関係なく例外投げる方がよくね?
Re: (スコア:0)
関数に空配列を入れたらtrueを戻すのが普通なのだから、当然、関数を呼び出すコードを書く人もそのような動作を期待してコートを組む。そのように作っておけば関数を作る人も関数を呼び出す人も何の誤解も起こらず問題は起きない。空配列を入れたら例外を戻すような動作は全く風変りであり混乱を生むので良くないと思う。
Re: (スコア:0)
普通、では無いな
Re: (スコア:0)
解1.
「配列のすべての要素が条件を満たすならtrueを返す」は「配列の要素の1つでも条件を満たさないならfalseを返す」と同義である。
空の配列が渡されたとき、条件を満たさない要素の数はゼロでありfalseを返す要件は成立しないため、trueを返す。
解2.
「配列のすべての要素が条件を満たすならtrueを返す」は「配列の要素数と条件を満たす要素の数が等しいならtrueを返す」と同義である。
空の配列が渡されたとき、条件を満たす要素の数はゼロであり配列の要素数と等しいのでtrueを返す。
Re: (スコア:0)
「集合Aのすべての要素が条件Pを満たす」を論理式で書くと∀x(x∈A⇒P(x))
Aが空集合ならx∈Aは偽だからx∈A⇒P(x)は真、したがって∀x(x∈A⇒P(x))は真
前提Pが偽のとき、P⇒QがどんなQに対しても真であるという古典論理の性質が嫌ならParaconsistent logicとか
それにしたって「偽である」とはならないんじゃないかな