Ben oynamalar prolog-coroutining yüklemleri freeze/2
ve 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 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ı , Ote-prolog 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ı?