Je jouais avec les prédicats prolog-coroutiningfreeze/2
et frozen/2
:
?- freeze(X,a=a), frozen(X,Goal).
?- freeze(X,a=a), freeze(Y,b=b), X=Y, frozen(X,Goal).
sicstus-prolog (version 4.5.1 pour x86_64) a donné ces réponses:
| ? - gel (X, a = a), gelé (X, objectif). Objectif = prologue: geler (X, utilisateur: (a = a)) , prolog: gel (X, utilisateur: (a = a))? ; non | ? - gel (X, a = a), gel (Y, b = b), X = Y, gelé (X, objectif). Y = X, Objectif = (utilisateur: (a = a), prologue: gel (X, utilisateur: (b = b))) , prolog: gel (X, utilisateur: (a = a)), prolog: gel (X, utilisateur: (b = b))? ; non
Maintenant je ne m'attendais pas!Goal = prolog:freeze(X,user:(a=a))
Ce que je fait attendre étaient des réponses comme celles données par SWI-Prolog Version 8.0.3:
? - gel (X, a = a), gelé (X, objectif). Objectif = utilisateur: (a = a) , gel (X, a = a). ? - gel (X, a = a), gel (Y, b = b), X = Y, gelé (X, objectif). X = Y, Objectif = (utilisateur: (a = a), utilisateur: (b = b)) , geler (Y, a = a), gel (Y, b = b).
On peut dire que les réponses SICStus et SWI sont correctes ...
Mais y a-t-il une raison plus profonde à la réponse quelque peu particulière donnée par SICStus?