如何在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).

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

:-dynamic(color/2).