许多论文确实指出,如下所示的等式统一问题可能在指数时间内运行,当occurs_check=true
. 没有规定这是顶级查询或子句主体,它只是等式统一问题:
X1 = f(X0, X0),
X2 = f(X1, X1),
..
Xn-1 = f(Xn-2, Xn-2),
Xn = f(Xn-1, Xn-1).
如果为真,这可能是发生检查的最坏情况,因为正常的变量共享统一是线性的。是否每个 Prolog 系统都必须将这个方程统一问题作为最坏的情况?
如果 Prolog 系统没有occurs_check=true
标志,可以尝试unify_with_occurs_check/2
代替(=)/2
.