Ausrufezeichen im Prolog

Angesichts der folgenden Fakten und Prädikaten:

sound(time1).
sound(time2).
sun(time3).
relax(X):-sound(X),!,sun(X).
relax(_):-sun(_).

Beim ausführen relax(S). würde ich erwarten, dass man S=time1 aufgrund der ! sagt (korrigiert mich wenn ich falsch Liege), dass wenn die " X " zufrieden ist , dann halt das backtracking.

Hier ist die trace:

3 ?- trace.
true.

[trace] 3 ?- relax(S).
   Call: (6) relax(_G1831) ? creep
   Call: (7) sound(_G1831) ? creep
   Exit: (7) sound(time1) ? creep
   Call: (7) sun(time1) ? creep
   Fail: (7) sun(time1) ? creep
   Fail: (6) relax(_G1831) ? creep
false.

Also warum Prolog prüft auch sun(time1), obwohl, dass es traf die Ausrufezeichen, nachdem er zufrieden durch sound(X) (weil sound(time1) ist eine Tatsache).

Das hat nichts zu tun mit funktionaler Programmierung und ist nicht geeignet für die Programmier-Sprachen-tag... keine tags hinzufügen, nur weil Sie Lust dazu haben.

InformationsquelleAutor ron | 2013-02-25

Schreibe einen Kommentar