質問をしたいと思います。私が取り組んでいるナレッジ ベースがあり、delete_predicate を使用して、必要な述語をユーザーに削除してもらいたいと考えています。
ナレッジベースは次のようなものです。
is_tired(erin).
is_tired(mary).
削除述語を次のように定義しました
delete_predicate(Predicate):-tell('my_knowledge_base.pl'),
retract(Predicate),
told.
ユーザーが述語 is_tired(mary) を削除したいとします。彼は次のクエリを入力します。
?-delete_predicate(is_tired(mary)).
そして、与えられた述語は kb から削除されます。前述のルールを試してみましたが、すべての kb のコンテンツが削除されます!!
ポインタをいただければ幸いです。
delete_predicate が機能するために必要な方法を正確に示します。
前述の知識ベースがいくつかの述語で強化されていると仮定しましょう。
:-dynamic(tired/1).
tired(kosta).
tired(renata).
tired(jim).
tired(mom).
tired(sister).
tired(mother).
tired(uncle).
tired(me).
ユーザーが疲れた(お母さん)を削除したい場合。kb から、彼はこれを照会します。
?-delete_predicate(tired(mom)).
次に、ナレッジ ベースからその述語が削除され、次のようになります。
tired(kosta).
tired(renata).
tired(jim).
%here used to be the tired(mom).
tired(sister).
tired(mother).
tired(uncle).
tired(me).
ユーザーが KB から Tired(me) を削除したい場合、KB は次のようになります。
tired(kosta).
tired(renata).
tired(jim).
%here used to be tired(mom).
tired(sister).
tired(mother).
tired(uncle).
%here used to be tired(me).
等々...