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

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