gpt4 book ai didi

prolog - 卡住/2 的意外行为

转载 作者:行者123 更新时间:2023-12-03 15:10:48 24 4
gpt4 key购买 nike

我在玩谓词 freeze/2frozen/2 :

?- freeze(X,a=a), frozen(X,Goal).
?- freeze(X,a=a), freeze(Y,b=b), X=Y, frozen(X,Goal).

(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,
目标=(用户:(a = a),序言:卡住(X,用户:(b = b))),
序言:卡住(X,用户:(a = a)),
序言:卡住(X,用户:(b = b))? ;


现在 Goal = prolog:freeze(X,user:(a=a))我没有期待!

我所期望的是像 给出的答案。版本 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 给出的有些奇怪的答案是否有更深层次的原因?

最佳答案

我不知道这种差异是否有任何“深层”原因。由于frozen/2是属性变量的通用接口(interface),不是特殊情况freeze/2 是有意义的目标。

事实上,直到 4.5.1,SICStus 尝试过,但有时会失败,以特殊情况 freeze/2目标。这就是为什么您会看到 user:(a=a)为第一个子目标。在下一个版本中,我们对此进行了更改,因此结果将变为 Goal = (prolog:freeze(X,user:(a=a)),prolog:freeze(X,user:(b=b))) (我们还对 frozen/2 进行了一些其他改进)。

关于prolog - 卡住/2 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58905021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com