问题描述
事实证明,SICStus Prolog 没有发生的检查 序言标志。至少我们找不到一个,而这个在这里 给出错误信息:
/* SICStus 4.6.0 (x86_64-win32-nt-4) */
?- set_prolog_flag(occurs_check,true).
Domain error in argument 1 of set_prolog_flag/2
似乎值“true”不是问题,
关键的统一可以通过现有的
内置 unify_with_occurs_check/2
。一个有趣的值
发生_检查 Prolog 标志的值是“错误”。
如何实现谓词 unify_with_occurs_check_and_error/2
?
请注意,unify_with_occurs_check_and_error/2 的解决方案
应该表现得像 unify_with_occurs_check/2,即不触发
归因变量。
以下是 Prolog 标志的示例用法:
?- set_prolog_flag(occurs_check,error).
true.
?- X = f(X).
ERROR: ...
这就是在 SICStus Prolog 中会做的事情:
?- unify_with_occurs_check_and_error(X,f(X)).
ERROR: ...
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)