Ich habe mit den Prolog-Coroutining- Prädikaten herumgespieltfreeze/2
und 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 für x86_64) gab folgende Antworten:
| Einfrieren (X, a = a), eingefroren (X, Ziel). Ziel = Prolog: Einfrieren (X, Benutzer: (a = a)) , Prolog: einfrieren (X, Benutzer: (a = a))? ;; Nein | - Einfrieren (X, a = a), Einfrieren (Y, b = b), X = Y, eingefroren (X, Ziel). Y = X, Ziel = (Benutzer: (a = a), Prolog: Einfrieren (X, Benutzer: (b = b))) , Prolog: einfrieren (X, Benutzer: (a = a)), Prolog: einfrieren (X, Benutzer: (b = b))? ;; Nein
Jetzt habe ich nicht erwartet!Goal = prolog:freeze(X,user:(a=a))
Was ich tat , waren Antworten erwarten , wie die von bestimmten diejenigen swi-prolog Version 8.0.3:
Einfrieren (X, a = a), eingefroren (X, Ziel). Ziel = Benutzer: (a = a) , einfrieren (X, a = a). - Einfrieren (X, a = a), Einfrieren (Y, b = b), X = Y, eingefroren (X, Ziel). X = Y, Ziel = (Benutzer: (a = a), Benutzer: (b = b)) , einfrieren (Y, a = a), einfrieren (Y, b = b).
Wahrscheinlich sind sowohl die SICStus-Antworten als auch die SWI-Antworten korrekt ...
Aber gibt es einen tieferen Grund für die etwas eigenartigen Antworten von SICStus?