教程中的例子使用的是Amzi来编译。我用的则是SICStus,但是在试验本节中的语句时出现了“Permission error: cannot retract static user:here/1”的问题,修改解释器的Language为SICStus或ISO均出现此问题,觉得应该是解释器不同造成的差异,于是在Amzi下试验,发现运行正常,后经在网上查找资料,发现SICStus中Consult后的谓词语句都是静态的,如果想对其进行动态的修改,需要用dynamic修改原文件。

比如在本例中,需要在:

here(kitchen).

前增加如下语句:

:- dynamic here/1.

即(见图1):

:- dynamic here/1.
here(kitchen).

这样在SICStus就可以成功执行goto/1了(见图2)。

clip_image001

图1 pro文件

clip_image002

图2 运行效果

参考资料:
http://bulba.sdsu.edu/prolog/parsing/recursion_and_assertion.htm
http://www.swi-prolog.org/FAQ/DynamicCode.html

原例见:
http://hyry.dip.jp/tech/book/page.html/prolog/godeep_data_manage.html

Comments are closed.

Post Navigation