abolish/1
從數據庫中刪除給定謂詞的所有子句。因此,只要您需要刪除有關此謂詞的信息,只需添加一個電話到abolish(PredName/Arity)
即可。請注意,在廢除對動態謂詞的調用後,不會失敗,但會報告錯誤。
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)
在SWI-Prolog的,abolish
工程靜態的程序,除非序言標誌iso
設置爲true。如果您打算僅刪除動態謂詞,則應該嘗試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