Arithmetik in Prolog
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.
Inhaltsverzeichnis
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.