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
,除非 prolog 标志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.