[Next]プロパティ [Previous]トレース [Up]PoPの使用方法 [Top]

コールバック

Prologプログラムの実行中に,Pythonプログラムを呼び出す(コールバックする)ことができます.
呼び出されたプログラムの中では, を行うことができます.

コールバックの設定

コールバックは,assertメソッドに対してbodyキーワードを使用して,
pop.assertz(head, body=callable_obj)
と宣言することにより登録します. ここで,callable_objは,一つの引数を持つ呼出し可能な(callable)オブジェクトでなければなりません. 呼出し可能なオブジェクトには, などがあります.

コールバックのタイミング

設定されたコールバックは,当該述語の呼出し/再呼出し時と,バックトラック時に呼び出されます.
バックトラック時にも呼び出されますので,注意してください.

コールバックの引数

コールバックには,コールバック・マネジャというオブジェクトが渡されます. このオブジェクトのメソッドを呼び出すことにより,どちらのタイミングで呼び出されたのかを知ることや,変数値の参照,変数の束縛などが行えます.

コールバックの結果

呼出し/再呼出し時には,コールバックが返却する値により,評価の成功/失敗が決定されます.
コールバックから非0の値が返されれば成功,それ以外は,失敗と判定されます.
バックトラック時には,コールバックの結果は無視されます.

呼出しタイミングの取得

コールバック・マネジャのcallingメソッドを呼び出すことにより取得します. 呼出し/再呼出し時は非0,バックトラック時は0が返されます.
def callback(mgr):
  if mgr.calling():
    print 'CALL or REDO'
  else:
    print 'BACKTRACK'
  return 1

変数値の参照

コールバック・マネジャのvariablesメソッドを呼び出すことにより,変数に束縛されている値が返されます. 形式は,inquireメソッドの結果と同じです.

変数の束縛

束縛されていない変数を束縛することができます. 束縛できる値はPoPオブジェクトです.ただし,(束縛されているかにかかわらず)変数を含んでいてはなりません. 変数の束縛は,コールバック・マネジャのbindメソッドを呼び出して行います. この第2引数は,暗黙的にPoPオブジェクトに変換されます.
def callback(mgr):
  if mgr.calling():
    mgr.bind('x', 3)
  return 1

例外

コールバック・マネジャの呼出しで発生する例外は,標準例外およびFail例外です.

コールバック・マネジャのメソッドについては,リファレンスを参照してください.

[Next]プロパティ [Previous]トレース [Up]PoPの使用方法 [Top]