无法在 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
我希望能够为程序 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