Tôi đã chơi xung quanh với các vị từ prolog-coroutiningfreeze/2
và frozen/2
:
?- freeze(X,a=a), frozen(X,Goal).
?- freeze(X,a=a), freeze(Y,b=b), X=Y, frozen(X,Goal).
sicstus-prolog (phiên bản 4.5.1 cho x86_64) đã đưa ra những câu trả lời sau:
| ? - đóng băng (X, a = a), đóng băng (X, Mục tiêu). Mục tiêu = prolog: đóng băng (X, người dùng: (a = a)) , prolog: đóng băng (X, người dùng: (a = a))? ; Không | ? - đóng băng (X, a = a), đóng băng (Y, b = b), X = Y, đóng băng (X, Mục tiêu). Y = X, Mục tiêu = (người dùng: (a = a), prolog: đóng băng (X, người dùng: (b = b))) , prolog: đóng băng (X, người dùng: (a = a)), prolog: đóng băng (X, người dùng: (b = b))? ; Không
Bây giờ tôi không mong đợi!Goal = prolog:freeze(X,user:(a=a))
Những gì tôi đã mong đợi là câu trả lời giống như câu trả lời được đưa ra bởi phiên bản swi -prolog 8.0.3:
? - đóng băng (X, a = a), đóng băng (X, Mục tiêu). Mục tiêu = người dùng: (a = a) , đóng băng (X, a = a). ? - đóng băng (X, a = a), đóng băng (Y, b = b), X = Y, đóng băng (X, Mục tiêu). X = Y, Mục tiêu = (người dùng: (a = a), người dùng: (b = b)) , đóng băng (Y, a = a), đóng băng (Y, b = b).
Có thể cho rằng, cả câu trả lời SICStus và câu trả lời SWI đều đúng ...
Nhưng có một lý do sâu xa hơn cho (các) câu trả lời hơi kỳ dị được đưa ra bởi SICStus?