在gprolog中声明谓词动态

时间:2009-05-09 20:52:21

标签: prolog

我在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)时。

我已经阅读了dynamic documentation,但我无法弄清楚如何使用它,至少在gprolog中。我错过了什么吗?

1 个答案:

答案 0 :(得分:13)

通过预先:-

来修复第一行
:- dynamic(player_at/1).

如果没有:-,则该行会对谓词dynamic/1进行重新定义,而不是执行现有的dynamic谓词。

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

:- dynamic player_at/1.