为什么 SWI-Prolog 发明 f/2 仅给定 f/1?
Why does SWI-Prolog invent f/2 given only f/1?
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 return
?- dif(X, f(Y)), X=f(a).
X = f(a),
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
是的,您可以简化它,但是...什么时候才能知道优化成本是否低于获得的收益?
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 return
?- dif(X, f(Y)), X=f(a).
X = f(a),
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
是的,您可以简化它,但是...什么时候才能知道优化成本是否低于获得的收益?