Я играл с предикатами -прологами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)) , пролог: заморозить (X, пользователь: (a = a))? ; нет | ? - заморозить (X, a = a), заморозить (Y, b = b), X = Y, заморозить (X, цель). Y = X, Цель = (пользователь: (a = a), пролог: заморозить (X, пользователь: (b = b))) , Пролог: замораживание (Х, пользователь: (а = а)), пролог: заморозить (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?