Ich habe vor kurzem angefangen zu lernen Prolog
und habe ein Problem festgestellt.Abfrage zurück, true/false
Nachfolgend wurde in Prolog
geladen:
likes(john, apple).
likes(john, pear).
likes(john, grapes).
likes(bill, mango).
likes(bill, apple).
ich ein Prädikat all_like(What, List)
schreibe, die True
, wenn alle Menschen in List
wie die Frucht in What
zurückkehren.
ZB:
all_like(apple,[john, bill]).
zurückkehren sollte:
true ;
false.
all_like(grapes,[john, bill]).
zurückkehren sollte:
false.
ich den folgenden Code haben:
all_like(What,List) :- check_list(What,List).
check_list(What,[]) :- write('true').
check_list(What, [X|Rest]) :- likes(X,What), check_list(What,Rest).
check_list(What, [X|Rest]) :- \+ likes(X,What), write('false').
Meine Ergebnisse sind:
erste Abfrage
true
true .
2. Abfrage
false
true .
jemand wissen würde, warum ich diese Ergebnisse bekommen werde?
Welche Bedeutung hat der zweite boolesche Wert?
Schließlich erscheint die .
nach einem Raum von Bedeutung?
Vielen Dank für Ihre Hilfe.
Dank lurker, das macht viel mehr Sinn. Darf ich fragen, warum 'false' nach' true; 'im ersten Beispiel angezeigt wird? –
@Giri "false" wird nach "true" angezeigt, weil Prolog einen Auswahlpunkt hatte, zu dem er zurückgehen und nach weiteren Lösungen suchen kann, aber keine zusätzlichen Antworten gefunden hat. Also gibt SWI Prolog "false" aus. Sie können im GNU-Prolog-Fall sehen, dass Sie "nein" statt "falsch" erhalten, und es bedeutet dasselbe: keine Lösungen mehr. – lurker