8

我在 Prolog 中有这段代码:

dynamic(player_at/1).
player_at(house).
goto(X) :- retract(player_at(house)), assert(player_at(X)).

但我仍然收到此错误:

uncaught exception: error(permission_error(modify,static_procedure,player_at/1),retract/1)

当我执行 goto(foo) 时。

我已经阅读了动态文档,但我不知道如何使用它,至少在 gprolog 中是这样。我错过了什么吗?

4

1 回答 1

14

通过添加前缀来修复第一行:-

:- dynamic(player_at/1).

没有:-该行将 dreefine predicate dynamic/1,而不是执行现有的dynamic谓词。

其他 prolog 实现(但不是 gprolog)也支持这一点:

:- dynamic player_at/1.
于 2009-05-09T21:00:12.097 回答