如何在 SWI-Prolog 中的所有统一中启用发生检查?
How to enable the occurs check in all unifications in SWI-Prolog?
根据Wikipedia:
Implementations offering sound unification for all unifications are Qu-Prolog and Strawberry Prolog and (optionally, via a runtime flag): XSB, SWI-Prolog and Tau Prolog.
但是,当我执行 apropos(occur)
时,它只会找到 unify_with_occurs_check/2
。 man 页面也没有提到“发生”。如何为 SWI-Prolog 中的所有统一启用发生检查?
在Environment Control部分,它列出了系统的标志。 occurs_check
标志是控制发生统一检查的标志。
您可以设置标志:
:- set_prolog_flag(<b>occurs_check</b>, true).
例如:
?- X = f(X).
X = f(X).
?- set_prolog_flag(occurs_check, true).
true.
?- X = f(X).
false.
所以首先它统一了 X
和 f(X)
。如果我们稍后将 occurs_check
设置为 true
,那么如果我们再次尝试将 X
与 f(X)
统一,则会失败。
根据Wikipedia:
Implementations offering sound unification for all unifications are Qu-Prolog and Strawberry Prolog and (optionally, via a runtime flag): XSB, SWI-Prolog and Tau Prolog.
但是,当我执行 apropos(occur)
时,它只会找到 unify_with_occurs_check/2
。 man 页面也没有提到“发生”。如何为 SWI-Prolog 中的所有统一启用发生检查?
在Environment Control部分,它列出了系统的标志。 occurs_check
标志是控制发生统一检查的标志。
您可以设置标志:
:- set_prolog_flag(<b>occurs_check</b>, true).
例如:
?- X = f(X).
X = f(X).
?- set_prolog_flag(occurs_check, true).
true.
?- X = f(X).
false.
所以首先它统一了 X
和 f(X)
。如果我们稍后将 occurs_check
设置为 true
,那么如果我们再次尝试将 X
与 f(X)
统一,则会失败。