事実や規則をPoPに登録するには,assertzメソッドを使用します.
assertzは,このデータベースの末尾に事実/規則を追加するメソッドです.
後から登録されたものは,検索順序が後になります.
assertzの引数は,暗黙的にPoPオブジェクトに変換されます.
なお,使用者が事実/規則として登録した述語を使用者定義述語,PoPがあらかじめ持っている述語を組込み述語と呼びます.
事実
P0.を登録するには,
pop.assertz(P0)と呼び出します.
規則
P0 :- P1, P2, .. , Pn.を登録するには,
pop.assertz(P0, P1, P2, .. , Pn)あるいは,Clauseの生成と同様に
pop.assertz(P0, body=(P1, P2, .. , Pn))と呼び出します. 事実,規則にかかわらず,節を指定して
pop.assertz(P0, body=[P1, P2, .. , Pn])
とすることもできます.fact = Clause(P0) rule = Clause(P0, P1, .. , Pn) pop.assertz(clause=fact) pop.assertz(clause=rule)
例えば,有名なプログラムのappend
は,以下のように登録します.append([], _X, _X). append([_A | _X], _Y, [_A | _Z] :- append(_X, _Y, _Z).
from PoP import * pop = PoP() Append = Atom('append') A = Variable('A') X = Variable('X') Y = Variable('Y') Z = Variable('Z') pop.assertz(Append([], X, X)) pop.assertz(Append(List(A, tail=X), Y, List(A, tail=Z)), Append(X, Y, Z))