2008年5月28日水曜日

双六はプログラム

双六を知っている人は多いだろう。というより、知らない人はいないだろう。
双六は、さいころを振って、その目の数だけ進み、そのマスの指示に従う。これを繰り返し、ゴールを目指すゲームだ。
双六からさいころを取り除くとほとんどプログラムになる。双六を使ってプログラムの原理を説明してみる。
これから下記のような図を用いる。
1,1,1,1
ここで、左端をスタート、左端をゴールとする。また、その他の数字は右に進む距離を示す。つまり、上記の例では左端から1つずつ右に進み、右端で停止する。
この例では、数字は(「右に進め」という)命令を意味する。よって、プログラムに他ならない。ただし、このプログラムは具体的な計算は何もしない。
実際のCPUでもこの例のように1つずつ命令を読み取り実行する。しかし、実際のCPUでは命令を実行するたびにメモリの内容を変更する。つまり副作用で計算を行う。副作用を省いてしまえば上のように簡単な双六になってしまう。
次の例を示す。
3,0,0,1
これは0の部分をスキップしている。
1,1,1,-2
これは無限ループだ。永遠に右端に到達しない。
3,3,0,-2
これは終了(右端に到達)する。
このような単純な双六にレジスタや条件分岐のルールを盛り込むと本格的なプログラムになる。

0 件のコメント: