表がすべてを決める

よみもの+手を動かす時間:およそ25分

機械の個性は、どこにあるか

前のレッスンの機械は、なぜ「裏返す」仕事をしたのでしょう。テープはただの紙で、ヘッドはただの読み書き係です。個性のありかは、実験室の下に出ていた遷移表(せんいひょう)——あの1枚の表です。

表の1行は、こう読みます。「この状態で、この記号を読んだら——これを書いて、こちらへ動いて、この状態に移る」。機械は毎歩、いまの状態と読んだ記号で表を引き、書いてあるとおりにするだけです。

表と機械を、見くらべながら歩く

今度は「再生する」ではなく「1歩すすむ」で進めてください。いま使われている行に、緑の印がつきます

いまの状態すすむ
0 歩目
遷移表(この機械のすべて)
状態読む書く動く次の状態
すすむ01→右へすすむ
すすむ10→右へすすむ
すすむ__・そのままおわり

最初の1歩は「すすむ」で「0」を読むので、1行目が光ります。次は「1」を読むので2行目。最後に空白を読んで3行目が光り、「おわり」へ——機械の一生は、表の上の旅なのです。表にない組み合わせに出会うと機械は手詰まりになります。つまりこの表は、ありうる場面ぜんぶへの返事を前もって書いた、問答集でもあります。

くりあがりの連鎖を見る

もう少し働く機械を見ましょう。仕事は「2進法の数に1をたす」です。2進法とは0と1だけで数を書く流儀ですが、細かいことより現象を見てください。999に1をたすと1000——くり上がりが連鎖して、けたが波打つあの現象です。

いまの状態みぎへ
0 歩目
遷移表(この機械のすべて)
状態読む書く動く次の状態
みぎへ00→右へみぎへ
みぎへ11→右へみぎへ
みぎへ__←左へくりあげ
くりあげ01・そのままおわり
くりあげ10←左へくりあげ
くりあげ_1・そのままおわり

「111」(2進法の7)に1をたすと「1000」(8)。機械はまず右端まで歩き、戻りながら1を0に変えつづけ、左端の空白に1を書いて止まりました。8歩です。状態が「みぎへ」から「くりあげ」に切りかわる瞬間を、表の光りかたで確かめてください。

表=プログラム

ここで、この機械のいちばん大事な性質に名前をつけます。テープもヘッドも歩き方も、どの機械でも同じでした。違うのは表だけ。つまり——表が、プログラムです

あなたはコース1で「プログラムは曖昧さのない文」と学びました。遷移表は、その極限のすがたです。1行の曖昧さもなく、解釈の余地もなく、機械はただ表を引く。プログラミング言語の長い文章も、つきつめればこの表のような「場面と返事の対応」に行き着きます。

書きかえてみる

ことばで分かるのと、手で分かるのは別ものです。下の実験室は、表が書きかえられます

いまの状態すすむ
0 歩目
遷移表(この機械のすべて)
状態読む書く動く次の状態この行を消す

演習:0だけを裏返す機械

上の実験室の表を書きかえて、「0は1に裏返すが、1はそのままにする」機械を作ってください。0110 を入れて再生したとき、1111 が残れば成功です。

  1. どの行を直せばよいか、表を声に出して読んで見当をつける
  2. 直したら、再生して確かめる
ヒント1(考え方)

「1を読んだら0を書く」と言っている行が1行だけあります。1をそのままにしたいなら、その行の「書く」を何に変えればよいでしょう。

こたえ

2行目(すすむ・1を読む)の「書く」を 0 から 1 に変えます。「1を読んだら、1を書きなおして右へ」——結果として、1は素どおりです。1マス書きかえただけで、機械の仕事が変わる。表がプログラムだという実感は、ここにあります。

このレッスンで分かったこと

  • 遷移表の1行=「この状態でこの記号なら、書く・動く・移る」という問答
  • 状態の数は、機械が見分けたい「最中」の数
  • テープもヘッドも共通。機械の個性は表だけ——表がプログラム
  • 表を1マス書きかえれば、機械は別の仕事をする