HSG

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

Anwendung der Systemprädikate between und findall

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.

Beispiele

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] ;

Der Operator "is"

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.

Beispiel

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!