[ 目次, 前節, 次節, 索引 ]

5  レジスタ計算機での計算



私の目的は, 時計の運動が一個の錘りによるのと同様に, 多重の運動の多くが, 最も単純で物質の力によるものである限り, 天の機械は神がかった生きているものではなく, 時計仕掛けであること (また, 時計に心があると信じるものは, 製作者の栄光を仕事のせいにする)を示すことである.

Johannes Kepler (Herwart von Hohenburgへの書簡, 1605)

われわれは本書の初めに, Lispで書いた手続きを使ってプロセスを学び, プロセスを記述した. これらの手続きの意味を説明するのに, 一連の評価モデル: 1章の置換えモデル, 3章の環境モデル, そして4章の超循環評価器を使った. 特に超循環モデルの調査では, Lisp風言語をどう解釈するかの神秘の多くを解消した. しかし超循環評価器でさえ, それはLispシステムの制御の機構を解明出来なかったので, 重要な問題に答えていない. 例えば, 部分式の評価がその値を使う式に値をどう返すかを, 評価器は説明しない. また, ある再帰的手続きは再帰的プロセスを生成するのに, 別の再帰的手続きは反復プロセスを生成する(つまり固定スペースを使って評価する)のはなぜかを, 評価器は説明しない. これらの問題は, 超循環評価器がそれ自身Lispプログラムであり, 従って基盤のLispシステムの制御構造を継承しているので, 未解決になっている. Lisp評価器の制御構造を更に完全に記述するためには, Lisp自身より更に基本的レベルで勉強しなければならない.

   本章では伝統的な計算機での, ステップごとの操作を使い, プロセスを記述しよう. そういう計算機, 別名 レジスタ計算機(register machine)は, レジスタ (registers)と呼ぶ一組の記憶素子の内容を操作する命令(instructions)を逐次に実行する. 代表的なレジスタ計算機の命令は, あるレジスタの内容に基本演算を作用させ, 結果を他のレジスタに代入する. レジスタ計算機で実行されるプロセスの記述は, 伝統的な計算機の「機械語」プログラムに非常によく似ている. しかしある特定の計算機の機械言語に焦点を絞る代りに, いくつかのLisp手続きを調べ, それらの手続きを実行する特別なレジスタ計算機を設計しよう. そこでわれわれの仕事を, 機械言語の計算機プログラマの視点ではなく, ハードウェア方式設計者の視点で解決していく. レジスタ計算機を設計するのに, 再帰のような重要なプログラム構造を実装する機構を開発しよう. またレジスタ計算機の設計を記述する言語を提案する. 5.2節では, 設計した機械をシミュレートするためにこれらの記述を使うLispプログラムを実装する.

   われわれのレジスタ計算機の基本演算の殆んどは非常に単純である. 例えばある演算は二つのレジスタから取り出した数を足し, 第三のレジスタに格納すべき結果を生じる. こういう命令は, 簡単に記述されるハードウェアで実行出来る. しかし, リスト演算を扱うためには, car, cdrおよびconsのような, 精巧な記憶割当て機構を必要とする記憶装置用演算を使うことになる. 5.3節では, 更に初歩的な演算を使い, これらの実装を学ぶ.

   5.4節では, レジスタ計算機としての単純な手続きを形成する経験を積んだ後, 4.1節の超循環評価器で記述したアルゴリズムを実行する計算機を設計する. これにより, 評価器における制御の機構の具体的なモデルを用意することで, Schemeの式がどう実行されるかの理解のギャップが埋る. 5.5節では, Schemeプログラムを, 評価レジスタ計算機のレジスタと命令を使って直接実行出来る命令列に変換する単純な翻訳系を学ぶ.


[ 目次, 前節, 次節, 索引 ]