next up previous contents index
Next: GC Up: ジェネリック・オブジェクトの概略 Previous: Consumer object

   
Generator object

Generator については、 乱数発生器(runtime/random.c)を例として記述する。

単一化:
単一化については、generatorはactive unification用のものしか 持たない。 しかしながら、以下の2つのメソッドを定義することが可能であり、 特定のクラスとの単一化について、幅広い処理を行うことができるようになっている。

UNIFYメソッド:
単一化の対象となる オブジェクトが渡される。 対象オブジェクト種別に対して処理を変更したり、 対象のオブジェクトに対しての操作を行ったりすることができる。 また、「遅延」を返すことが可能であり、遅延の時には次のgenerateメソッドが 呼びだされる。

「遅延」かどうかは、戻り値が0であるかどうかによる。0の場合は「遅延」である。 非ゼロの場合には、新しいヒープ割付点を示す。

GENERATE:
文字通り、generaterオブジェクトを他のデータ型に 「変身」させるためのオブジェクト。 オブジェクトが関連付けられている変数の値が必要がゴールがあるときや、 active_unifyが失敗したときなどに呼びだされる。

戻り値は3通りである。

makeref(0):
メモリ不足等の理由により生成を中断した。再度、 generateメソッドが呼び出されることが期待される。

makecons(0):
内部エラー。

上記以外:
生成された項を示す。

乱数発生器の実装では、特に単一化の相手による処理の変更などは必要ないため、 UNIFYに対しては常に失敗を返し、GENERATEに対しては乱数をCARにもち、 CDRに生成器(つまり自分自身)を持つ新しいhookを入れたCONSを返す。

印字:
PRINTメソッドはこれまでと同様。

GC:
GCについてはこれまでと同様。

NEW ルーチン:
new ルーチンに関しては、これまでと同様である。



Sekita Daigo
1998-05-18