Part3: 真偽値

花丸「ブール代数に悩むシェイクスピア。生きるべきか、死ぬべきか、それが問題だ」
果南「お、さすがだね」
花丸「えへへ・・・文芸なら得意ずら」
ダイヤ「ええ、今回はまさにそのブール代数の基本となる真偽値を見てみますわ」


ダイヤ「真偽値は、真(true)と偽(false)の2値をとるデータ型のことです。条件分岐やフラグに使われることが多いですわ」

ダイヤ「真偽値のリテラルはたったこれだけです。簡単ですわね」
果南「まあ、これだけならね」
ダイヤ「もちろん、これで終わりではありませんわ。真偽値を扱う関数がいくつかあります」


ダイヤ「はじめに、与えられた値が真偽値かを判定する関数ですわ」

ダイヤ「REPLでいろいろ試してご覧なさい。#t#fを指定したときだけ#tになるはずです」
花丸「・・・うん、そうなるずら」
果南「関数まだやってないけど、このboolean?ってのが関数の名前なんだよね?」
ダイヤ「ええ、最初に関数名を書いて、続けてそれに渡す値を書きます。関数名に?が付くのは、結果が真偽値となる関数を表す慣習ですわ」


ダイヤ「では論理演算です。数学的には論理和、論理積、否定といった演算がありましたわね?」
花丸「マルは、文系・・・」
果南「私は体育会系かな」
ダイヤ「だとしても習っているはずですわよ?」

ダイヤ「まずは論理和からいきますわ。2つの値のいずれかが真なら真、の演算です」

花丸「えっと、どっちも#fのときだけ#f・・・うん、確かにそうなってるずら」

ダイヤ「続いて論理積です。2つの値のいずれも真なら真、の演算ですわ」

果南「これはどっちも#tのときだけ#t・・・うん、合ってる」

ダイヤ「最後に否定ですわ。これは真偽を逆転させるものです」

果南「うん、これは簡単、っと」
ダイヤ「これを組み合わせて書くことで複雑な論理演算も表現できますわ」

花丸「括弧が増えてきたずら・・・」
ダイヤ「落ち着いて内側の括弧から順に解釈していけばよいだけですわ」


ダイヤ「最後に。この先、文字列や数値などのデータ型が出てきますが、それらと真偽値の関係を見ておきます」
果南「関係って、変換できるかみたいな話?」
ダイヤ「まあ近いですわね。真偽値を受け取る関数に真偽値以外を渡したらどうなるか、notを使って見てみます」

ダイヤ「notの結果がいずれも偽ということは、数値や文字列の評価は・・・はい、花丸さん!」
花丸「ずら!?・・・えーと、notがなければどっちも真だから、数値も文字列も真ってことずら」
ダイヤ「正解ですわ。数値や文字列に限らず、Schemeでは#f以外の全てが真として扱われます」
果南「たまに、0は偽だとかいう言語もあるけど・・・」
ダイヤ「Schemeでは関係ありませんわ」


ダイヤ「では次回は数値について見てみます。Schemeは算術計算に使われることも多いですから、重要なところですわ」
花丸「文系・・・」
果南「体育会系・・・」
ダイヤ「黙らっしゃい!つべこべ言わずに覚えるのです!」


LINEで送る
Pocket


返信を残す

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