HSG |
|
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