2017-02-28 4 views
0

Wenn ich die folgende Regel:Warum hört es nicht auf?

test(X, Y, abc) :- X=='true' ; Y =='true'. 

und ich mache eine Abfrage wie: test(true, true, X).

Warum wäre es Ausgabe X = abc ? zweimal?

| ?- test(true, true, X). 
X = abc ? n 
X = abc ? n 
no 

Sollte es nicht nur einmal "antworten"?

Sollte es nicht finden, dass X == wahr und dann stoppen, weil, wenn nur eine Bedingung wahr ist, die ganze Bedingung wahr ist?

+2

'test (true, true, abc)' ist zweimal erfolgreich, weil Ihre Regel besagt, dass es wahr ist, wenn 'X == true' ODER wenn' Y == true'. Es gelingt also auf zwei verschiedene Arten. Prolog zeigt Ihnen alle Lösungen. – lurker

+2

... und Sie können immer 'true' statt' 'true'' schreiben – false

Antwort

1

Dies geschieht, weil Prolog versucht, Sie alle möglichen Lösungen zu finden, und alle möglichen Wege dazu folgen wird. Du gibst zwei mögliche Wege zur Wahrheit, also wird es beiden folgen und dir beide Ergebnisse zeigen.