我有:
:- dynamic blah/2.
retractall(blah(_,_)).
但我仍然得到:
No permission to modify static procedure `retractall/1'
如何删除所有出现的blah()? BTW它可以在swipl控制台中运行!!
感谢
答案 0 :(得分:1)
谓词retractall/1
是标准的内置谓词,因此,在大多数系统中,用户无法重新定义谓词。在你的代码中,你试图为这个谓词定义一个事实,因此错误信息。但是在控制台上你将它用作目标,即你只是调用内置谓词。
如果要确保在加载源文件时没有blah/2
谓词的子句,请使用initialization/1
标准指令:
:- initialization(retractall(blah(_, _))).