Arithmetik in Prolog

Aus Informatik
Wechseln zu: Navigation, Suche

Natürlich kann man mit dem Prolog auch rechnen, wenngleich darin sicher nicht der Hauptanwendungsbereich dieser Programmiersprache liegt. Die Arithmetik beschränkt sich oft auf elementare Berechnungen. Dafür reicht die Verwendung von Integer-Zahlen meist aus. SWI-Prolog stellt jedoch außer der Integer-Arithmetik auch Real-Arithmetik und verschiedene mathematische Funktionen zur Verfügung.

Zuweisungen

Wertzuweisungen erfolgen durch den Operator is/2:

?- is(X, 2*123-45).
X=201.

Der Zuweisungsoperator wird allerdings fast ausschließlich in der sogenannten Infix-Schreibweise verwendet:

?- X is 2*123-45.
X=201.

Der is-Operator entspricht der Wertzuweisung ":=" in Pascal. Der is-Operator muss vom Unifikationsoperator "=" unterschieden werden:

?- X = 3 + 4.
X = 3 + 4.

?- X is 3 + 4.
X = 7.

Arithmetische und Vergleichsoperatoren

In SWI-Prolog sind die folgenden arithmetischen Operatoren zugelassen:

Operator Operation
X + Y Addition
X - Y Subtraktion
X * Y Multiplikation
X ** Y Potenz XY
X / Y Real - Division
X // Y Integer-Division
X mod Y Rest der Integer-Division

Operatoren zum Vergleich arithmetischer Ausdrücke:

Operator Vergleichsoperation
X =:= Y numerisch gleich
X =\= Y numerisch ungleich
X < Y X ist kleiner als Y
X > Y X ist größer als Y
X =< Y X ist kleiner oder gleich Y
X >= Y X ist größer oder gleich Y

Numerische Vergleichsoperatoren lassen sich nur dann anwenden, wenn die Terme auswertbar sind, d. h. alle Operanden Zahlen oder instanzierte Variablen sind.

Beispiele

?- 36 =:= 40 - 4.
true.

?- 100-34+(56+23) > -5*34.
true.

?- 2*15 =\= 15*2.
false.

?- Y is 10, X is 2*Y.
Y = 10,
X = 20.

?- X is 5, Y is 10, X = Y.
false.

Operatoren zum Vergleich beliebiger Ausdrücke

Operator Vergleichsoperation
== oder = Test auf Gleichheit
\== oder \= Test auf Ungleichheit

Hier werden die Operanden als Textkonstanten interpretiert und Zeichen für Zeichen miteinander verglichen.

Beispiele

?- otto == Otto.
false.

?- paula == paula.
true.

?- 36 == 40 - 4.
false.

?- 36 \== 40 - 4.
true.

?- 36 == 36.
Yes

Mathematische Funktionen

Operator Vergleichsoperation
integer/1 Test, ob eine Integer-Zahl vorliegt
ceiling/1 Aufrunden auf nächst größere ganze Zahl
floor/1 Abrunden auf nächst kleinere ganze Zahl
truncate/1 Abschneiden der Nachkommastellen
round/1 kaufmännisches Runden
abs/1 Betrag einer Zahl
exp/1 Potenz zur Basis e
log/1 Logarithmus zur Basis e
sqrt/1 Quadratwurzel

Beispiele

?- X is ceiling(7.003), Y is ceiling(-7.003).
X = 8,
Y = -7.

?- X is floor(7.789), Y is floor(-7.789).
X = 7,
Y = -8.

?- X is truncate(1.51), Y is truncate(1.49).
X = 1,
Y = 1.

?- X is round(1.51), Y is round(1.49).
X = 2,
Y = 1.

?- X is abs(-99).
X = 99.

?- X is exp(2), Y is log(X).
X = 7.38906,
Y = 2.

?- X is sqrt(8**2), Y is sqrt(1234567).
X = 8,
Y = 1111.11.