AND・OR・NOTをパズルで考える

AND(アンド)、OR(オア)、NOT(ノット)は、コンピュータが条件を判断するときに使う、いちばん基本の操作です。論理演算と呼ばれます。プログラミングを習い始めると、「もし A かつ B なら」「もし A または B なら」という形で、すぐに出てきます。
言葉はむずかしそうですが、中身は日常の言葉とほとんど同じです。この記事では、三つの操作を身近な例で説明し、家でできるパズルの形にしてみます。
真と偽
論理演算で扱うのは、数ではなく「正しいか、正しくないか」です。正しいことを「真」、正しくないことを「偽」と呼びます。英語では true と false です。
「今日は雨が降っている」という文は、雨の日には真、晴れの日には偽になります。「7は10より大きい」は、いつでも偽です。論理演算は、こうした真か偽かの答えを、組み合わせたり、ひっくり返したりする操作です。
NOT:ひっくり返す
NOT は、真と偽をひっくり返します。
「雨が降っている」が真なら、「雨が降っていない」は偽です。「雨が降っている」が偽なら、「雨が降っていない」は真です。日本語の「〜ない」が、そのまま NOT にあたります。
NOT を2回続けると、元に戻ります。「雨が降っていない、のではない」は、「雨が降っている」と同じことです。数の世界で、−1を2回かけると元の数に戻るのと似ています。
AND:両方そろったら
AND は、二つの条件が両方とも真のときだけ真になります。日本語では「かつ」です。
「雨が降っている」かつ「寒い」なら、コートを着ていく、という決まりを考えます。コートを着るのは、雨が降っていて、しかも寒い日だけです。雨でも暖かい日や、寒くても晴れている日は着ません。
この決まりを、すべての組み合わせについて表にしてみます。こうした表を「真理値表」と呼びます。
| 雨が降っている | 寒い | コートを着る(AND) |
|---|---|---|
| 真 | 真 | 真 |
| 真 | 偽 | 偽 |
| 偽 | 真 | 偽 |
| 偽 | 偽 | 偽 |
4行のうち、真になるのは1行だけです。AND は、条件をきびしくする操作だと言えます。
OR:どちらか一つでも
OR は、二つの条件のどちらか一つでも真なら真になります。日本語では「または」です。
「雨が降っている」または「風が強い」なら、自転車をやめて歩いていく、という決まりを考えます。
| 雨が降っている | 風が強い | 歩いていく(OR) |
|---|---|---|
| 真 | 真 | 真 |
| 真 | 偽 | 真 |
| 偽 | 真 | 真 |
| 偽 | 偽 | 偽 |
今度は、4行のうち3行が真です。OR は、条件をゆるくする操作です。
ここで一つ、こどもがよく引っかかる所があります。1行目、雨が降っていて風も強い日です。論理の OR では、両方が真のときも真になります。ところが、日常の「または」は、「コーヒーまたは紅茶」のように、どちらか一つだけを選ぶ意味で使うことが多いのです。論理の OR は「どちらか、または両方」だと、一度はっきり言っておくとよいと思います。どちらか一方だけのときに真になる操作には、別に XOR(排他的論理和)という名前があります。
スイッチの回路で考える
電池と豆電球とスイッチの回路で考えると、AND と OR の違いが目に見えます。
スイッチを二つ、一本の道にならべてつなぐと(直列)、両方のスイッチを入れたときだけ電球がつきます。これが AND です。スイッチを二つ、別々の道にしてつなぐと(並列)、どちらか一方を入れれば電球がつきます。これが OR です。スイッチが入っていることを真、電球がつくことを真と考えれば、さっきの真理値表とまったく同じになります。
私は、このたとえを使うのはよいことだと考えています。コンピュータの中で実際に論理演算をしているのは、とても小さな電気のスイッチの組み合わせだからです。たとえ話ではなく、ほとんど本当の話です。
家でできる言葉のパズル
道具がなくても、言葉だけでパズルにできます。
部屋の中のものを指して、「赤くて、丸いものはどれ」と聞きます。これは AND です。りんごは当てはまりますが、赤い本や白いボールは当てはまりません。次に「赤いか、丸いものはどれ」と聞きます。これは OR で、りんごも、赤い本も、白いボールも当てはまります。
こどもに出題する側をやってもらうのも楽しいと思います。「NOT を使って、この部屋で一つだけ当てはまる問題を作って」と頼むと、「四角くなくて、テーブルの上にあるもの」のような問題が出てきます。条件を組み合わせて、答えを一つにしぼる。これはプログラムで条件を書くときと同じ頭の使い方です。
慣れてきたら、少しむずかしい問題もできます。「赤くて丸い、ではないもの」と「赤くない、または丸くないもの」は、同じものを指すでしょうか。答えは、同じです。これはド・モルガンの法則と呼ばれる決まりで、高校の数学で習います。名前は知らなくても、部屋の中のもので確かめれば、こどもにも実感できると思います。
プログラミングとのつながり
小学校でよく使われる Scratch には、「かつ」「または」「ではない」というブロックがあります。これがそのまま AND、OR、NOT です。「もし〜なら」のブロックの中に入れて、たとえば「スペースキーが押された、かつ、地面に触れている」ならジャンプする、という条件を作れます。
条件がうまく動かないとき、私は真理値表を書いてみることを勧めます。4行の表を書いて、それぞれの場合にどうなってほしいかを確かめると、AND と OR を取り違えていることや、NOT を付ける場所がちがうことに気づけます。小学校のプログラミング教育のねらいは 小学校のプログラミング教育では何を学ぶのか に、パズルで育つ考え方は プログラミング的思考とは に書きました。
Math Gates の論理の回路
Math Gates は、私が作っている回路パズルのゲームです。盤の空きマスに、数を変える「門」と、進む向きを90度曲げる「鏡」を置き、「うごかす」を押すと、数を持った「ビット」がまっすぐ走ります。目的地の「ポート」は、条件を満たす値しか受け取りません。
7つあるワールドの最後、「論理の回路」が、この記事の話です。ビットが「v>n」「v<n」の比較の門を通ると、数は真か偽のどちらかに変わります。そのあと NOT・AND・OR の論理門を通り、ポートの条件に合う値で届けば成功です。ポートには「真」を条件にしたものもあります。駒を置いた時点で、ビットの走り方と値の変わり方が点線で盤に描かれるので、真と偽がどこでひっくり返るのかを、動かす前に目で追えます。クリアすると、いまやったことに名前と式が付いた発見カードがもらえます。
7ワールド140問で、対象は8歳からです。無料で遊べて、クリアの合間に広告が入ります。広告は買い切りの課金で消せます。遊び方は Math Gates の始め方 に書きました。
AND・OR・NOT は、コンピュータのための特別な言葉ではなく、ふだん私たちが使っている「かつ」「または」「ない」に、きちんとした形を与えたものだと思います。
