Prolog案例三

开发工具依然是GNU-Prolog,在案例中有这样的小问题如下:
here(kitchen).
move(Place):- retract(here(X)), asserta(here(Place)).
我执行move(office).后,
错误提示如下:
<span style="color:#FF0000;">ERROR: retract/1: No permission to modify static_procedure `here/1'</span>

错误很明显:不要使用静态的过程here/1. 如果大家直接把所有的事实和规则下载GNU-Prolog就不会出现这个问题。


解决方法是:

here(kitchen).你应将程序文件中的here(kitchen).删掉, 并用asserta(here(kitchen))来初始化here谓词, 这样系统就知道here谓词是动态的了, 以后就可以对其进行更改了. 

效果如下:记得第一步初始化here谓词。

| ?- asserta(here(kitchen)).

yes
| ?- look.
You are in the kitchen
You can see:
  apple
  broccoli
  crackers
You can go to:
  office
  cellar
  dining room

yes
| ?- goto(office).
You are in the office
You can see:
  desk
  computer
You can go to:
  hall
  kitchen

希望对你有帮助。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章