不能retractall()?

时间:2015-10-04 19:52:36

标签: prolog

我有:

 :- dynamic blah/2.
 retractall(blah(_,_)).

但我仍然得到:

No permission to modify static procedure `retractall/1'

如何删除所有出现的blah()? BTW它可以在swipl控制台中运行!!

感谢

1 个答案:

答案 0 :(得分:1)

谓词retractall/1是标准的内置谓词,因此,在大多数系统中,用户无法重新定义谓词。在你的代码中,你试图为这个谓词定义一个事实,因此错误信息。但是在控制台上你将它用作目标,即你只是调用内置谓词。

如果要确保在加载源文件时没有blah/2谓词的子句,请使用initialization/1标准指令:

:- initialization(retractall(blah(_, _))).