如何在 SWI-Prolog 的所有统一中启用发生检查?

Max*_*axB 5 prolog swi-prolog occurs-check

根据维基百科

为所有统一提供声音统一的实现是 Qu-Prolog 和 Strawberry Prolog 以及(可选地,通过运行时标志):XSB、SWI-Prolog和 Tau Prolog。

但是,当我这样做时,apropos(occur)它只会找到unify_with_occurs_check/2. 该男子页面没有提到“出现”要么。如何为 SWI-Prolog 中的所有统一启用发生检查?

Wil*_*sem 5

环境控制部分,它列出了系统的标志。该occurs_check标志是控制发生统一检查的标志。

您可以使用以下方法设置标志:

:- set_prolog_flag(occurs_check, true).
Run Code Online (Sandbox Code Playgroud)

例如:

?- X = f(X).
X = f(X).

?- set_prolog_flag(occurs_check, true).
true.

?- X = f(X).
false.
Run Code Online (Sandbox Code Playgroud)

所以首先它Xf(X). 如果我们稍后将 设置occurs_checktrue,那么如果我们X再次尝试与 统一f(X),则会失败。