在 gprolog 中声明谓词动态
我在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
通过添加
:-
来修复第一行:如果没有
:-
,该行将定义谓词dynamic/1
,而不是执行现有的动态谓词。
其他 prolog 实现(但不包括 gprolog)也支持这一点:
Fix the first line by prepending
:-
:Without
:-
the line would dreefine predicatedynamic/1
, instead of executing the existingdynamic
predicate.Other prolog implementations (but not gprolog) support this as well: