Part10:真偽値

希「シェイクスピアは語る。生きるべきか、死ぬべきか、それが問題や」
海未「いきなり何なのですか?それは・・・」
希「昔読んだ本に書いてあったんよ。ブール型の章の頭に」
海未「その昔がいつなのかは触れないことにしますが・・・」
凛「シェイクスピア、最近読んだにゃ」
海未「!」
希「!」
海未(凛が西洋文学とは、天変地異の前触れでしょうか・・・)
希(本当なら地球が地球が大ピンチなやつやね・・・)
凛「あのねちっこい赤キャスター、凛は大嫌いにゃ!サーヴァントなら拳で語るにゃ!」
希「・・・あー、海未ちゃん、天変地異は免れたで」
海未「何の話か分かりませんが・・・」

希「さて、本題の真偽値についてやけど、真偽という以上はキーワードは2つしかあらへん。truefalseや」
凛「猫でもわかるにゃ」
希「実はこの2つ、そういう名前のアトムなんよ。:true:falseってのが定義してあってな」
海未「ということは、アトムとしても使えるのですか?」
希「使う必要があるかは置いといて、マップやキーワードリストのキーにしたりとかはできるみたいやね」

希「次、この2つを使った論理演算や」

希「andornotがあって、論理積、論理和、否定。数学で習うやろ?」
凛「ももももちろんにゃ」
希「凛ちゃん・・・素直に言うてもウチは怒らへんで?」
凛「怒る人が隣にいるにゃ~!」
海未「いえ、私は呆れているだけですから」
希「andは両辺ともにtrueならtrue、orは両辺どちらかtrueならtrue、notは単純に逆転や」

希「&&||!ってのもあってな。同じく論理積、論理和、否定で、truefalseが相手ならさっきと同じ結果になる」

海未「何か違いがあるのですか?truefalseが相手なら、というのは・・・」
希「これは真偽値以外も評価できるんよ。たとえば・・・」

希「真偽値以外の場合、nil以外は真とみなされる。で、結果が真であれば右辺の値が結果になるみたいや」
海未「ということは、||でも同じことが言えるのでしょうか」

海未「&&と、少し違うように見えますが」
希「せやね。||の場合、左辺の時点で結果が決まることがあるやろ?左辺が真なら右辺は見なくても結果は真なわけや」
海未「その場合に、左辺の値が結果になる、と。たしかに、そういう動きをしているようです」
希「時々やけど、このテクニックが便利だったりするから、よく覚えておいて損はないで」

希「ほな次は比較演算や」

希「=====は等値、<は未満、<=は以下、>=は以上、>は超過や」
凛「=====って何が違うの?」
希「1と1.0があったとして、数学的には同じ1やん?」
凛「そのくらいは凛でもわかるにゃ」
希「==は、数学で言うところの同じ値だったら真になる演算子や。で、===はっていうと、1と1.0って型が違うやん?」
凛「integerとfloatにゃ」
希「よくできました。===は型まで合ってないと真にならないんよ。==より厳密な比較やね」
海未「数値以外は比較できるのですか?」
希「基本は同じや」

凛「3行目が血も涙もないにゃ」
海未「あれを書いたときは、よし上手いこと言った、とか密かに思っていたのですが・・・」
希「畑神様への信心が足らんのや。まあともかく、文字列比較する分には=====は同じと考えてよさそうや。調べた範囲では、やけど」
凛「凛と海未ちゃんの比較がよくわからないんだけど・・・」
希「あー、それは文字コード順やね。rよりuが大きいから"rin" < "umi"が真になるんや」
凛「よかった~。胸の順だったらどうしようかと思ったよ~」
海未「どんな処理系ですか・・・」
希「そんな75も76も大して変わらn」
凛「ドムは黙るにゃ!!」
海未「私たちの需要のある層にはその僅かな差こそが重要なのです!!」
希「お、おう・・・」

希「次回パターンマッチングやけど、凛ちゃん、いける?」
凛「うん!頑張って調べてくる!」
希「Elixirはじめ関数型言語では重要な概念や。よろしくな」


LINEで送る
Pocket


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です