2013-07-15 27 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