我在玩序言相关谓词freeze/2
和frozen/2
:
?- freeze(X,a=a), frozen(X,Goal).
?- freeze(X,a=a), freeze(Y,b=b), X=Y, frozen(X,Goal).
sicstus-prolog(x86_64的版本4.5.1)给出了以下答案:
| α-冻结(X,a = a),冻结(X,目标)。 目标= prolog:freeze(X,user:(a = a)), prolog:freeze(X,user:(a = a))吗?; 没有 | α-冻结(X,a = a),冻结(Y,b = b),X = Y,冻结(X,目标)。 Y = X, 目标=(用户:(a = a),序言:冻结(X,用户:(b = b))), 序言:冻结(X,用户:(a = a)), prolog:freeze(X,user:(b = b))吗?; 没有
现在没想到!Goal = prolog:freeze(X,user:(a=a))
我所期望的是swi-prolog版本8.0.3 给出的答案:
α-冻结(X,a = a),冻结(X,目标)。 目标=用户:(a = a), 冻结(X,a = a)。 α-冻结(X,a = a),冻结(Y,b = b),X = Y,冻结(X,目标)。 X = Y, 目标=(用户:(a = a),用户:(b = b)), 冻结(Y,a = a), 冻结(Y,b = b)。
可以说SICStus答案和 SWI答案都是正确的...
但是,对于SICStus给出的某些特殊答案,是否有更深层的原因?
1
Sicstus中的AFAIK未实现掩盖“最后失败”的功能。; 不`
—
Anton Danilov
首先,明确资格是可取的。
—
假
直到3.8.5,此问题不存在。从3.8.6开始确实存在。
—
假
@AntonDanilov。好的。但是我实际上是指粗体“目标= ...”之间的差异。
—
重复
也许@PerMildner会回答?
—
假