HSG

Aktuelle Seite: HSG/Fächer/Informatik/Prolog

Hat man folgende Wissensbasis

cool(peter).
cool(norman):-cool(freddy).
cool(dmitri):-cool(mark),cool(patrice).
cool(mark):-cool(norman).
cool(freddy):-cool(peter).
cool(patrice):-cool(mark).

so interessiert man sich dafür, wer nun alles cool ist. Die Anfrage ?- cool(X). liefert auch alle Lösungen, wobei jede neue Lösung neu vom System angefordert werden muss.
Mit Hilfe des System-Prädikats fail, das immer schiefgeht aber Backtracking erzwingt, kann man Folgendes erreichen:

?- cool(X),write(X),nl,fail.
peter
norman
dmitri
mark
freddy
patrice

No

Die Schleife besteht also darin, dass alle Backtracking-Möglichkeiten ausgeschöpft werden.

Will man wissen, wieviele cool sind oder die Namen der Coolen sortieren, so wäre es schön eine Liste der Lösungen zu haben. Genau das leistet das Systemprädikat findall.

?- findall(X,cool(X),L).

X = _G157
L = [peter, norman, dmitri, mark, freddy, patrice] ;

No