next up previous contents index
Next: トップレベルループ Up: KLICの基本的な動作 Previous: KLICの基本的な動作

   
動作モデル

KLICでのKL1プログラムの動作モデルは以下の通りである。

1.
処理系は実行可能ゴールスタックから、1つゴールを選択し、 ガード実行を試みる(try操作)。

2.
ガード実行を試みた結果により、通常以下のどちらかの動作をする。
(a)
ガード実行を試みた結果、そのゴールが中断することが判明した場合には、 中断の原因となった未定義変数とゴールとを 「ペア」にして記憶しておく(中断操作)。

(b)
ガード実行できた場合には、ボディ実行を行う。 その結果、以下のようなことが行われる可能性がある

  • 単一化(単一化操作)。 その結果、未定義変数の具体化により、中断ゴールが再開可能 になる可能性がある。その場合には中断ゴールを実行可能ゴールスタックに入れる。

  • あらたなゴールのエンキュー(エンキュー操作)。

  • 実行の失敗(失敗操作)。

さらに、ガード実行を試みた結果、「失敗」する(どの候補節にもコミットしない) 可能性がある(ガード失敗操作)。

3.
以上を繰り返し、実行可能スタックにゴールがなくなれば、実行は終了 (top-level succeed操作)。

以上のような処理の各々は、KLICのコンパイラによりKL1プログラムから生成された コンパイルコード(すなわちmodule型関数) と、KLICの実行時ライブラリとが協調することにより 実現されている。その概略を以下で説明する。



Sekita Daigo
1998-05-18