1

在学习 Prolog 时,我正在编写一个基于文本的游戏,这是其中的一部分:

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

我收到一个关于静态程序的错误,但一个简单的搜索修复了它,在运行游戏时我会很快说dynamic stat/3。然而,在那之后,我在声明 Health 变量的文件中进一步收到错误:

stat(Target, health, Health),

我将问题缩小到这个(序言控制台):

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

在被声明为动态后,它不再在静态数据库中。但是通过谷歌搜索,找不到与我的问题相同的案例。我只需要查询和撤回/断言一个数据库。

4

1 回答 1

1

动态/1 是一个指令。使用此语法将其放在文件顶部附近

:- dynamic stat/3.
于 2013-07-15T08:39:27.887 回答