2013-07-15 28 views
1

雖然學習Prolog的,我寫一個基於文本的遊戲,這是它的一些:序言獲得動態的事實值

NewHealth is Health - Damage, 
retract(stat(Target, health, Health)), 
assert(stat(Target, health, NewHealth)), 

我跑的時候有大約靜態程序錯誤,但是一個簡單的搜索固定它,遊戲我只想快速說出dynamic stat/3。那可是之後,我還得到一個錯誤了,我宣佈生變量的文件中:

stat(Target, health, Health), 

我縮小了問題本(序言控制檯):

| ?- assert(test(a)). 
yes 
| ?- listing 
test(a). 
yes 
| ?- dynamic test/1 
yes 
| ?- listing 
yes 

被宣告動態後,它不再處於靜態數據庫中。但用谷歌搜索一個找不到與我的問題相同的案例。我只需要查詢和撤消/斷言單個數據庫。

回答

1

dynamic/1是一個指令。將它靠近文件頂部,使用此語法

:- dynamic stat/3. 
+0

這與輸入它有什麼不同? – DJRyan

+0

指令在編譯時解析(例如,當Prolog加載您的文件時)。現在,我不清楚*當你輸入時,但可能你的意思是* runtime *。這是數據,然後...... – CapelliC