无法在 SWI-Prolog 中使事实动态化

Unable to make facts dynamic in SWI-Prolog

我希望能够为程序 location:

动态撤回和断言事实
location(egg, duck_pen).

根据在线建议(包括 No permission to modify static procedure),我尝试将以下各项添加到我的源代码中,否则源代码仅包含上述断言:

dynamic location/2.
dynamic(location/2).
dynamic(location)/2.

前两个版本在编译时(加载到 SWI-Prolog 时)给我这个错误:

No permission to redefine built-in predicate `(dynamic)/1'
Use :- redefine_system_predicate(+Head) if redefinition is intended

最后一个版本在编译时没有给我报错,但是,无论我把它放在文件的开头还是结尾,当我试图收回我的事实时,我都会得到一个错误:

?- retract(location(egg,duck_pen)).
ERROR: retract/1: No permission to modify static procedure `location/2'

我正在使用 SWI-Prolog 版本 6.6.5。

使用

:- dynamic location/2.

location(X, Y) blah blah