【发布时间】:2019-11-17 20:43:24
【问题描述】:
我在玩prolog-coroutining 谓词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)), 序言:冻结(X,用户:(a = a))? ; 不 | ?- 冻结(X,a=a),冻结(Y,b=b),X=Y,冻结(X,目标)。 Y = X, 目标 = (user:(a=a),prolog:freeze(X,user:(b=b))), 序言:冻结(X,用户:(a = a)), 序言:冻结(X,用户:(b = b))? ; 不现在Goal = <b>prolog:freeze(X,</b>user:(a=a)<b>)</b>没想到!
我确实期望得到的答案类似于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 给出的有些奇怪的答案是否有更深层次的原因?
【问题讨论】:
-
Sicstus 中的 AFAIK 未实现屏蔽“上次失败”的功能`? ;没有`
-
一方面,明确限定是可取的。
-
到3.8.5这个问题不存在。从 3.8.6 开始,它确实存在。
-
@AntonDanilov。好的。但我实际上指的是粗体“Goal = ...”中的差异。
-
也许@PerMildner 会回答?
标签: prolog-coroutining sicstus-prolog swi-prolog prolog sicstus-prolog prolog-coroutining