Prolog Materialien Installation Grundlagen Eigenheiten Berechnungskonzept Listen Schleifen Mengen globale Variablen Datenbanken Arithmetik Ableiten Graphen Cut findall failure-driven-loop Akkumulator Grafik rapid prototyping Logik Rätsel Grammatik Syntax Glossar
Pfad: Startseite / Fächer / Informatik / Prolog / Arithmetik
Autor: mk
09.03.2008 12:16
1036
Arithmetik

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!

Valid XHTML 1.0! lokal