bool isAllOk(Array array)
例えば、配列を調べていって、全てTrueならTrueを返す関数があるとします
このとき、空の配列が渡されたらどうするでしょうか
実例に合わせて考えると、箱の中の商品の品質をチェックして、
すべて合格なら出荷する、という例ですね
これは、箱が空なら合格とすべきです
0個で出荷とかどう考えてもエラーだから、不合格だ、と思うかもしれませんが
それは個数チェックであり、品質チェックとは別種のチェックです
なぜなら、品質チェックの目的は製品が問題なく組み立てられているかのチェックであり
商品のピックアップ部分に問題があるかをチェックするものではありません
一般化
上記の例ではTrueだったのですが、時にはFalseを返すのが正解の場合もあります
例えば、「1個でも合格品があれば合格」という検査の場合、空の場合はどうでしょうか
たとえば、最低1個はあたりが保証されているくじ、なんてものを考えてみましょう
それなら、空の場合は当然不合格ですね
これらを一般化すれば、「単位元」を返す、が正解になります
単位元とは
単位元とは、何もしない数と捉えればいいです
足し算に置いては0で、掛け算においては1です
「すべてTrue」というチェックでは、単位元とはTrueになり、
「どれか1個でもTrue」というチェックでは単位元はFalseになります
数学において
$1\times0 = 0$というのは、誰もが疑うことがないですが、冷静に考えると難しいです
1を0回足す、と言われて、すぐに行動が理解できる人は少ないでしょう
これは、足し算の単位元が0だから、という理由付けにもなっています
1^0=1 \\
0!=1
掛け算の例です
0回掛け算をするときは単位元とすると都合がいいのですね
吸収元
余談ですが、「すべてTrue」でのFalseは、それを加えると必ずFalseに変化します
また、「どれか1個でもTrue」でのTrueは、それを加えると必ずTrueに変化します
このように、それと演算すると、結果が自分自身の値になるものを吸収元と言います
単位元が場を荒らさないものとしたら、
吸収元はすべてをぶち壊し自分の世界を造る乱暴者という感じがしますね
足し算に吸収源は存在しませんが、掛け算は0が吸収元です