[Next]結果の処理 [Previous]登録内容の照会 [Up]PoPの使用方法 [Top]

問合わせ

問合わせ,すなわち質問
?- P1, P1, .. , Pn.
は,PoPインスタンスに対して
result = pop.inquire(P1, P2, .. , Pn)
あるいは,
result = pop.inquire(cond=(P1, P2, .. , Pn))
result = pop.inquire(cond=[P1, P2, .. , Pn])
と呼び出します. resultには,{変数名:値}の形式の辞書(dictionary)が返ります.
条件を満たす変数の組が無い場合は,Noneが返されます.
なお,inquireの引数は,暗黙的にPoPオブジェクトに変換されます.

一つの質問に対して,複数の解があることがあります.
inquireメソッドは,一つの解しか返しません. さらに別の解を要求するには,

result = pop.inquire_next()
と呼び出します.
もうそれ以上解が無い場合は,やはりNoneが返ります.

したがって,質問を満たすすべての解を求めたい場合は,

result = pop.inquire(P1, P2, .. , Pn)
while result <> None:
  # process the result here
  result = pop.inquire_next()
というような呼出しをします.

注意

質問が変数を含まない場合,あるいは変数がすべて無名変数である場合は,質問を満たす場合に空の辞書{}が返されます. したがって,while文を
while result:
とすると,条件を満たして空の辞書が返されてもwhileループを抜けてしまいます. 必ず結果がNoneでないかどうか(result<>None)で判定してください.

[Next]結果の処理 [Previous]登録内容の照会 [Up]PoPの使用方法 [Top]