问题描述
SWI-Prolog 7.6.4:
?- dif(X,f(Y)),X=f(a).
X = f(a),dif(f(f(a),Y),f(f(Y),a)).
请注意,我在查询中使用了 f/1
,但约束在 f/2
上。这没有错,但似乎相当迂回。为什么Prolog不返回
?- dif(X,dif(Y,a).
解决方法
打印约束中的 f
与您的 f
无关。这只是将子术语保持在一起的占位符:
?- dif(X,incal(Y)),X=incal(a).
X = incal(a),dif(f(incal(a),Y),f(incal(Y),a)). <--- residual constraints,not yet resolved
上面的意思就是:
-
incal(a)
必须与incal(Y)
不同;和 -
Y
必须与a
保持不同
是的,您可以简化它,但是……何时才能知道优化的成本是否会低于收益?