在 SICStus Prolog 中模拟发生_检查=错误

问题描述

事实证明,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 (将#修改为@)