通过阅读手册,我似乎无法找到两者之间的区别。
手册说:
建议使用retractall/1 来删除动态谓词的所有子句。
所以我选择retractall/1
在我的程序中使用;但是,我想知道有什么区别。
通过阅读手册,我似乎无法找到两者之间的区别。
手册说:
建议使用retractall/1 来删除动态谓词的所有子句。
所以我选择retractall/1
在我的程序中使用;但是,我想知道有什么区别。
标准内置谓词可用于删除动态谓词的retractall/1
所有子句,但运行时仍将知道该谓词。另一方面,标准的abolish/1
内置谓词不仅删除了所有谓词子句,而且使运行时不知道谓词。如果您在使用 删除其所有子句后尝试调用动态谓词retractall/1
,则调用将失败。但是如果你废除了一个动态谓词,在它之后调用它会导致一个谓词存在错误。
与 SQL 类比:
retractall(table_name(_,_,_))
可能delete from table_name
, while
abolish(table_name/3)
会扮演drop table_name
在我阅读您的问题和@PauloMoura 的好答案之前,我也不知道答案。
有了这个答案,我不想复制保罗的答案。相反,我建议您考虑阅读/搜索与 Prolog 相关的替代资源:
ISO 指令、控制结构和内置函数—<a href="/questions/tagged/iso-prolog" class="post-tag" title="show questions tagged 'iso-prolog'" rel="tag">iso-序言
4.12.5 从数据库中删除子句—<a href="/questions/tagged/sicstus-prolog" class="post-tag" title="show questions tagged 'sicstus-prolog'" rel="tag">sicstus-序言手册
8.7 动态子句管理——<a href="/questions/tagged/gnu-prolog" class="post-tag" title="show questions tagged 'gnu-prolog'" rel="tag">gnu-prolog manual
第 9 章动态子句和全局变量—<a href="/questions/tagged/bprolog" class="post-tag" title="show questions tagged 'bprolog'" rel="tag">bprolog手册
6.14断言、撤回和其他数据库修改—<a href="/questions/tagged/xsb" class="post-tag" title="show questions tagged 'xsb'" rel="tag">xsb手册
6.10.1修改数据库——yap手册的一部分
请注意,上述内容可能直接适合您使用的 Prolog 系统,也可能不适合您使用的 Prolog 系统。
尽管如此,拥有多个来源是一件好事:它可以防止您陷入困境!