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