Dondurulmuş / 2'nin beklenmedik davranışı


11

Ben oynamalar yüklemleri freeze/2ve frozen/2:

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

(x86_64 için sürüm 4.5.1) şu cevapları verdi:

| ? - donma (X, a = a), donma (X, Hedef).
Hedef = prolog: dondurma (X, kullanıcı: (a = a)) ,
prolog: dondurma (X, kullanıcı: (a = a))? ;
Hayır
| ? - dondurma (X, a = a), dondurma (Y, b = b), X = Y, dondurulmuş (X, Hedef).
Y = X,
Hedef = (kullanıcı: (a = a), prolog: dondurma (X, kullanıcı: (b = b))) ,
Prolog: dondurularak (X, kullanım: (a = a)),
prolog: dondurma (X, kullanıcı: (b = b))? ;
Hayır

Şimdi beklemiyordum!Goal = prolog:freeze(X,user:(a=a))

Ne yaptım bekliyoruz tarafından verilen olanlar gibi cevaplar vardı sürümü 8.0.3:

? - donma (X, a = a), donma (X, Hedef).
Hedef = kullanıcı: (a = a) ,
dondurma (X, a = a).
? - dondurma (X, a = a), dondurma (Y, b = b), X = Y, dondurulmuş (X, Hedef).
X = Y,
Hedef = (kullanıcı: (a = a), kullanıcı: (b = b)) ,
donma (Y, a = a),
dondurma (Y, b = b).

Muhtemelen, hem SICStus cevapları hem de SWI cevapları doğrudur ...

Ancak SICStus tarafından verilen biraz tuhaf cevapların daha derin bir nedeni var mı?


1
Sicstus AFAIK "son başarısızlık" maskeleme işlevselliği uygulanmadı `? ; no`
Anton Danilov

Birincisi, açık yeterlilik tercih edilir.
sahte

1
3.8.5'e kadar bu sorun mevcut değildir. 3.8.6'dan itibaren var.
yanlış

@AntonDanilov. Tamam. Ama aslında cesur çizgilerdeki “Goal = ...” farklılıklarından bahsediyordum.
tekrarlayın

1
Belki @PerMildner cevap verecektir?
yanlış

Yanıtlar:


6

Farkın "derin" bir nedeni olup olmadığını bilmiyorum. Yana frozen/2atfedilen değişkenlere genel arayüz, bu tür kılan değil özel durum için seziyorum freeze/2hedefleri.

Aslında, 4.5.1'e kadar, SICStus özel durum freeze/2hedeflerini denedi, ancak bazen başarısız oldu . Bu yüzden user:(a=a)ilk alt hedef için görüyorsunuz . Bir sonraki sürümde bunu değiştirdik, sonuç yerine gelecek Goal = (prolog:freeze(X,user:(a=a)),prolog:freeze(X,user:(b=b)))(ve bunun için başka iyileştirmeler de yaptık frozen/2).


4,5,1'e kadar ve 3,8,5'ten sonra
yanlış
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.