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

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

  • 空の配列には、条件を満たす要素は一つも無い。
    つまり、falseだと思う。

    • 「配列のすべての要素が条件を満たすならtrueを返す」関数というのは、配列の要素毎の条件判定の論理積を返す、と解するのが自然な気がする。Excel の AND 関数みたいな。

      論理積を計算するのにパラメータが 0個だったら、やっぱり例外を投げるべきではないかな。

      とは言え、そもそも人によって正解とするプログラムが違うのだったら仕様の定義が問題だと思うけど。

      • by Anonymous Coward on 2023年06月04日 13時35分 (#4471601)

        その理屈だとパラメータが1個の場合も論理積を計算できないのでは?

        親コメント
        • その理屈だとパラメータが1個の場合も論理積を計算できないのでは?

          イメージとしては excel の and 関数で、パラメータは 1個以上かな、と。
          もしくはベン図でいうと配列要素数分の真の重なり部分かどうかを返す関数と考えれば、1つの真偽の集合しか与えられなくても答えは出る、と。

          i=1 から n までの総和Σにおいても、n=1 のときは要素単体ですが、n=0 のときに単位元 0 を返すのは約束事もしくは定義であって自明のことではないのでは、という認識でいます。今回の関数は総和ならぬ総論理積だと思うので、問いは空論理積はどうあるべきか、という話ではないでしょうか。

          # 自信なし

          Wikipedia の空和や空積の説明には「定義することの妥当性」という項があり、これに従えば総論理積でも同様に単位元(=真)を返すと「定義するのが妥当」なのかもしれません。この妥当性を当然と感じるセンスが「良いプログラマかどうかの一つの境目」と言いたいのかな?

          私の感覚としてはきちんとドキュメント化する(またはドキュメント化を要求する)方が良いプログラマではないか、というのは変わりませんが。


          % irb
          irb(main):001:0> [1,2,3].all?{ |x| x > 0 }
          => true
          irb(main):002:0> [1].all?{ |x| x > 0 }
          => true
          irb(main):003:0> [].all?{ |x| x > 0 }
          => true

          Ruby 3.2 リファレンスマニュアル Array#all? [ruby-lang.org] 空配列については書かれていないけど、自明というスタンスなのかな…

          親コメント

Stay hungry, Stay foolish. -- Steven Paul Jobs

処理中...