abolish/1和retractall/1有什么区别?

Kev*_*gem 7 prolog prolog-assert

从阅读手册,我似乎无法找到两者之间的差异.

手册说:

建议使用retractall/1来擦除动态谓词的所有子句.

所以我选择retractall/1在我的程序中使用; 但是,我想知道区别是什么.

Pau*_*ura 8

retractall/1标准内置谓词可以用来删除所有条款的动态谓词,但断言仍然由运行时是已知的.该abolish/1标准内置谓词,在另一方面,不仅能消除所有的谓语从句也使得谓词未知的运行时间.如果在使用后删除所有子句后尝试调用动态谓词retractall/1,则调用将失败.但是如果你取消动态谓词,那么在之后调用它会导致谓词存在错误.


Cap*_*liC 5

类似于SQL:

retractall(table_name(_,_,_))可能是delete from table_name,而 abolish(table_name/3)将播放为drop table_name