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