HSG |
|
Prolog belegt zur Lösungsfindung Variablen mit möglichen Werten. Was ist aber, wenn die Variable z.B. durch das Prädikat integer(X) nur mit einer ganzen Zahl belegt werden darf? Kann man damit rechnen, dass das Prolog-System alle ganzen Zahlen einsetzt? Wohl kaum! Hier zeigt sich der Wert des System-Prädikats between(+UG,+OG,?Zahl), das alle ganzen Zahlen zwischen zwei Grenzen liefern kann.
teilt(X,Y):-between(1,Y,X),Y mod X =:= 0. teilermenge(X,M):-findall(T,teilt(T,X),M).
?- teilermenge(24,M). M = [1, 2, 3, 4, 6, 8, 12, 24] ;
Die Hilfe gibt an, dass -Number is +Expr wahr wird, wenn Number mit der Zahl,die
aus der Auswertung von Expr entsteht, unifiziert werden kann.
Normalerweise wird is mit einer ungebundenen Variablen auf der linken Seite benutzt.
Das heißt, is wird gewöhnlich im Sinne eines Zuweisungsoperators (rechte Seite wird
ausgewertet und der linken Seite zugewiesen, := in Pascal) benutzt.
Numerische Gleichheit soll mit =:= getestet werden.
teilt(X,Y) :- 0 is Y mod X.
funktioniert, weil zuerst Y mod X ausgewertet und dann unifiziert wird.
teilt(X,Y) :- Y mod X =:= 0.
So ist es besser!