abolish/1
は、与えられた述語のすべての句をデータベースから削除します。したがって、この述部に関する情報を削除する必要があるときはいつでも、abolish(PredName/Arity)
への呼び出しを追加してください。無効にした後、動的述語への呼び出しは失敗しないが、エラーを報告することに注意してください。プロローグフラグiso
がtrueに設定されていない限り、SWI-Prologで
12 ?- f(X,Y).
false.
13 ?- assert(f(a,b)).
true.
14 ?- f(X,Y).
X = a,
Y = b.
15 ?- abolish(f/2).
true.
16 ?- f(X,Y).
ERROR: user://2:67:
toplevel: Undefined procedure: f/2 (DWIM could not correct goal)
、静的手順のabolish
作品。動的述語のみを削除する場合は、retractall
を試してください。この場合、削除によってエラーが報告されるのではなく、障害が発生することに注意してください。
17 ?- [user].
:- dynamic f/2.
|:
% user://3 compiled 0.00 sec, 264 bytes
true.
18 ?- f(X,Y).
false.
19 ?- assert(f(a,b)).
true.
20 ?- f(X,Y).
X = a,
Y = b.
21 ?- retractall(f(X,Y)).
true.
22 ?- f(X,Y).
false.
[プロローグ - どのように一度だけのデータベースを作成/主張する]の可能複製(http://stackoverflow.com/questions/10437395/prolog-how-to-assert-make-a-database-only -once) –
多分、その質問は私にも聞いたので。プログラムが終了するたびに保存されたものはすべて消去する必要があります。 PROLOGが終了するたびに、必要なものを満たします。しかし、それは私が必要なものではありません。 :( – HungryCoder