表がすべてを決める
機械の個性は、どこにあるか
前のレッスンの機械は、なぜ「裏返す」仕事をしたのでしょう。テープはただの紙で、ヘッドはただの読み書き係です。個性のありかは、実験室の下に出ていた遷移表(せんいひょう)——あの1枚の表です。
表の1行は、こう読みます。「この状態で、この記号を読んだら——これを書いて、こちらへ動いて、この状態に移る」。機械は毎歩、いまの状態と読んだ記号で表を引き、書いてあるとおりにするだけです。
表と機械を、見くらべながら歩く
今度は「再生する」ではなく「1歩すすむ」で進めてください。いま使われている行に、緑の印がつきます。
| 状態 | 読む | 書く | 動く | 次の状態 |
|---|---|---|---|---|
| すすむ | 0 | 1 | →右へ | すすむ |
| すすむ | 1 | 0 | →右へ | すすむ |
| すすむ | _ | _ | ・そのまま | おわり |
最初の1歩は「すすむ」で「0」を読むので、1行目が光ります。次は「1」を読むので2行目。最後に空白を読んで3行目が光り、「おわり」へ——機械の一生は、表の上の旅なのです。表にない組み合わせに出会うと機械は手詰まりになります。つまりこの表は、ありうる場面ぜんぶへの返事を前もって書いた、問答集でもあります。
くりあがりの連鎖を見る
もう少し働く機械を見ましょう。仕事は「2進法の数に1をたす」です。2進法とは0と1だけで数を書く流儀ですが、細かいことより現象を見てください。999に1をたすと1000——くり上がりが連鎖して、けたが波打つあの現象です。
| 状態 | 読む | 書く | 動く | 次の状態 |
|---|---|---|---|---|
| みぎへ | 0 | 0 | →右へ | みぎへ |
| みぎへ | 1 | 1 | →右へ | みぎへ |
| みぎへ | _ | _ | ←左へ | くりあげ |
| くりあげ | 0 | 1 | ・そのまま | おわり |
| くりあげ | 1 | 0 | ←左へ | くりあげ |
| くりあげ | _ | 1 | ・そのまま | おわり |
「111」(2進法の7)に1をたすと「1000」(8)。機械はまず右端まで歩き、戻りながら1を0に変えつづけ、左端の空白に1を書いて止まりました。8歩です。状態が「みぎへ」から「くりあげ」に切りかわる瞬間を、表の光りかたで確かめてください。
表=プログラム
ここで、この機械のいちばん大事な性質に名前をつけます。テープもヘッドも歩き方も、どの機械でも同じでした。違うのは表だけ。つまり——表が、プログラムです。
あなたはコース1で「プログラムは曖昧さのない文」と学びました。遷移表は、その極限のすがたです。1行の曖昧さもなく、解釈の余地もなく、機械はただ表を引く。プログラミング言語の長い文章も、つきつめればこの表のような「場面と返事の対応」に行き着きます。
書きかえてみる
ことばで分かるのと、手で分かるのは別ものです。下の実験室は、表が書きかえられます。
| 状態 | 読む | 書く | 動く | 次の状態 | この行を消す |
|---|---|---|---|---|---|
✎ 演習:0だけを裏返す機械
上の実験室の表を書きかえて、「0は1に裏返すが、1はそのままにする」機械を作ってください。0110 を入れて再生したとき、1111 が残れば成功です。
- どの行を直せばよいか、表を声に出して読んで見当をつける
- 直したら、再生して確かめる
ヒント1(考え方)
「1を読んだら0を書く」と言っている行が1行だけあります。1をそのままにしたいなら、その行の「書く」を何に変えればよいでしょう。
こたえ
2行目(すすむ・1を読む)の「書く」を 0 から 1 に変えます。「1を読んだら、1を書きなおして右へ」——結果として、1は素どおりです。1マス書きかえただけで、機械の仕事が変わる。表がプログラムだという実感は、ここにあります。
このレッスンで分かったこと
- 遷移表の1行=「この状態でこの記号なら、書く・動く・移る」という問答
- 状態の数は、機械が見分けたい「最中」の数
- テープもヘッドも共通。機械の個性は表だけ——表がプログラム
- 表を1マス書きかえれば、機械は別の仕事をする