如何完全删除 Prolog 中的谓词?

How to completely remove a predicate in Prolog?

我的谓词 color/2 具有以下事实:

color(omlette, yellow).
color(tomato, red).
color(cucumber, green).
...

现在我想将它从系统中完全删除,即我希望 current_predicate(color/2) 失败。 但是,即使我 retractall(color(_, _)),并且确实删除了与 color 有关的所有事实,current_predicate(color/2) 仍然会成功。

我怎样才能让它失败?

使用abolish/1完全删除过程及其属性的所有子句:

abolish(color/2).

根据您的 prolog 处理器,您可能必须指出该过程是动态的,在您的示例中

:-dynamic(color/2).