next up previous contents index
Next: resume_goals()の詳細 Up: ゴールの再開: resume_goals() Previous: ゴールの再開: resume_goals()

中断構造に対しての処理の概略

   

Generatorの処理に比較してより複雑であるゴールレコード、consumerに対しての 処理については、概略の解説を以下で行う。 図2.10として挙げた中断構造の説明の図を 図5.2として再掲する。


  
Figure 5.2: 中断を表現するデータ構造
\begin{figure}\begin{center}
\epsfile{file=suspstruct.eps,width=.8\textwidth}
\end{center}\end{figure}

この図でわかるように、中断構造の内部は、ゴールレコードと consumerが混在して環状のリスト構造になっている。 この「ゴールの再開」処理では、このリスト構造をたどり、 以下のような処理を行う。

ような処理を行う。

このconsumerに対してのunifyメソッドの発行の結果、また再度同種の 構造の作成が必要になるような場合がある。例えば、マージャの処理は、

1.
入力にCONSがあれば、出力用にCONSを1つ割付け、 入力のCARをそのCONSにコピーし、出力側と単一化する。

2.
マージャオブジェクト自身を入力のCDRにフックしなおす。
という処理が行われる。このような処理は、入力が``ストリーム''で あるようなconsumerで広く用いられるため、効率良く処理できることが望ましい。 そのため、unifyメソッドの結果(戻り値)により、これまでの中断レコード、 待合せレコードなどを再利用し、すぐにまた中断構造を作成できるような 処理も実装している。



Sekita Daigo
1998-05-18