从阅读手册,我似乎无法找到两者之间的差异.
手册说:
建议使用retractall/1来擦除动态谓词的所有子句.
所以我选择retractall/1
在我的程序中使用; 但是,我想知道区别是什么.
该retractall/1
标准内置谓词可以用来删除所有条款的动态谓词,但断言仍然由运行时是已知的.该abolish/1
标准内置谓词,在另一方面,不仅能消除所有的谓语从句也使得谓词未知的运行时间.如果在使用后删除所有子句后尝试调用动态谓词retractall/1
,则调用将失败.但是如果你取消动态谓词,那么在之后调用它会导致谓词存在错误.
类似于SQL:
retractall(table_name(_,_,_))
可能是delete from table_name
,而
abolish(table_name/3)
将播放为drop table_name