gpt4 book ai didi

prolog - 仅撤回规则而不撤回 Prolog 中同一谓词的事实

转载 作者:行者123 更新时间:2023-12-01 13:33:34 25 4
gpt4 key购买 nike

我有一组规则和一组具有相同谓词的事实

p(1).
p(2).
g(1,1).
h(3,2).
p(X):- g(X,Y).
p(X):- h(X,Y).

我想做一个类似 retractall 的谓词,只删除规则而不删除事实。所以像这样:

retractRules(p(X)).

在 Prolog 中如何做到这一点?

最佳答案

由于我的逻辑缺陷只依赖于 retract/1,我删除了之前的答案。

基于 Paulo Moura 使用 clause/3 的想法,这里有一个使用 ISO predicate clause/2 的解决方案,使其更具可移植性:

retractRules(R) :-
clause(R, B),
B \== true,
retract(:-(R, B)),
fail.
retractRules(_).

这里假设您的规则首先是动态创建的,并使用适当的指令 (:- dynamic) 声明为动态谓词。例如,在以前的某个地方,你会有类似的东西:

assertz(:-(p(X), g(X,Y))).

关于prolog - 仅撤回规则而不撤回 Prolog 中同一谓词的事实,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42126317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com