在 gprolog 中声明谓词动态

发布于 2024-07-19 12:34:56 字数 477 浏览 7 评论 0原文

我在 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 中是这样。 我错过了什么吗?

I have this code in Prolog:

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

But I still get this error:

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

when I execute goto(foo).

I've read the dynamic documentation, but I can't figure out how to use it, at least in gprolog. Am I missing something?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

葬花如无物 2024-07-26 12:34:56

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

:- dynamic(player_at/1).

如果没有 :-,该行将定义谓词 dynamic/1,而不是执行现有的 动态谓词。

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

:- dynamic player_at/1.

Fix the first line by prepending :-:

:- dynamic(player_at/1).

Without :- the line would dreefine predicate dynamic/1, instead of executing the existing dynamic predicate.

Other prolog implementations (but not gprolog) support this as well:

:- dynamic player_at/1.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文