Я розігрувався з прорококоруючими предикатами 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 (версія 4.5.1 для x86_64) дав такі відповіді:
| ? - заморожувати (X, a = a), заморожувати (X, ціль). Мета = пролог: заморозити (X, користувач: (a = a)) , prolog: заморозити (X, користувач: (a = a))? ; ні | ? - заморожувати (X, a = a), заморожувати (Y, b = b), X = Y, заморожувати (X, ціль). Y = X, Мета = (користувач: (a = a), prolog: заморозити (X, користувач: (b = b))) , prolog: заморозити (X, користувач: (a = a)), prolog: заморозити (X, користувач: (b = b))? ; ні
Тепер я не сподівався!Goal = prolog:freeze(X,user:(a=a))
Те , що я зробив очікувати , були відповіді , як ті , наданих SWI-Пролог версії 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?