Prolog Language
Operatoren
Suche…
Vordefinierte Operatoren
Vordefinierte Operatoren nach ISO / IEC 13211-1 und 13211-2:
Priorität | Art | Operator (s) | Benutzen |
---|---|---|---|
1200 | xfx | :- --> | |
1200 | fx | :- ?- | Richtlinie, Abfrage |
1100 | xfy | ; | |
1050 | xfy | -> | |
1000 | xfy | ',' | |
900 | fy | \+ | |
700 | xfx | = \\= | Begriff Vereinheitlichung |
700 | xfx | == \\== @< @=< @> @>= | Termvergleich |
700 | xfx | =.. | |
700 | xfx | is =:= =\= < > =< >= | Arithmetische Auswertung und Vergleich |
600 | xfy | : | Modulqualifizierung |
500 | yfx | + - /\ \/ | |
400 | yfx | * / div mod // rem << >> | |
200 | xfx | ** | Schwimmerkraft |
200 | xfy | ^ | Variable Quantifizierung, ganzzahlige Potenz |
200 | fy | + - \ | Arithmetische Identität, Negation; bitweises Komplement |
Viele Systeme bieten weitere Operatoren als implementierungsspezifische Erweiterung an:
Priorität | Art | Operator (s) | Benutzen |
---|---|---|---|
1150 | fx | dynamic multifile discontiguous initialization | Standardrichtlinien |
1150 | fx | mode public volatile block meta_predicate | |
900 | fy | spy nospy |
Betreibererklärung
In Prolog können benutzerdefinierte Operatoren mit op/3
definiert werden:
op(+Precedence, +Type, :Operator)
Erklärt den Operator zum Operator eines Typs mit einer Rangfolge. Operator kann auch eine Liste von Namen sein. In diesem Fall werden alle Elemente der Liste als identische Operatoren deklariert.
Vorrang ist eine ganze Zahl zwischen 0 und 1200, wobei 0 die Deklaration entfernt.
Der Typ ist einer von:
xf
,yf
,xfx
,xfy
,yfx
,fy
oderfx
wobeif
die Position des Funktors undx
undy
die Positionen der Argumente bezeichnet.y
bezeichnet einen Begriff mit einer Priorität, die niedriger oder gleich der Priorität des Funktors ist, währendx
eine strikt niedrigere Priorität bezeichnet.- Präfix:
fx
,fy
- Infix:
xfx
(nicht assoziativ),xfy
(rechts assoziativ),yfx
(links assoziativ) - Postfix:
xf
,yf
- Präfix:
Verwendungsbeispiel:
:- op(900, xf, is_true).
X_0 is_true :-
X_0.
Beispielanfrage:
?- dif(X, a) is_true.
dif(X, a).
Termbestellung
Zwei Begriffe können über die Standardbestellung verglichen werden:
Variablen @ <Zahlen @ <Atome @ <Strings @ <Strukturen @ <Listen
Anmerkungen:
Strukturen vergleichen alphabetisch zuerst nach functor, dann nach Arity und zuletzt nach dem Vergleich der einzelnen Argumente.
Listen vergleichen zuerst nach Länge und dann nach Element.
Bestellbediener | Gelingt, wenn |
---|---|
X @ <Y | X ist in der Standardreihenfolge kleiner als Y |
X @> Y | X ist in der Standardreihenfolge größer als Y |
X @ = <Y | X ist in der Standardreihenfolge kleiner oder gleich Y |
X @> = Y | X ist in der Standardreihenfolge größer oder gleich Y |
Beispielabfragen:
?- alpha @< beta.
true.
?- alpha(1) @< beta.
false.
?- alpha(X) @< alpha(1).
true.
?- alpha(X) @=< alpha(Y).
true.
?- alpha(X) @> alpha(Y).
false.
?- compound(z) @< compound(inner(a)).
true.
Termgleichheit
Gleichheitsoperator | Gelingt, wenn |
---|---|
X = Y | X kann mit Y vereinheitlicht werden |
X \ = Y | X kann nicht mit Y vereinheitlicht werden |
X == Y | X und Y sind identisch (dh sie vereinigen sich, ohne dass variable Bindungen auftreten) |
X \ == Y | X und Y sind nicht identisch |
X =: = Y | X und Y sind arithmetisch gleich |
X = \ = Y | X und Y sind nicht arithmetisch gleich |