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 oder fx wobei f die Position des Funktors und x und y die Positionen der Argumente bezeichnet. y bezeichnet einen Begriff mit einer Priorität, die niedriger oder gleich der Priorität des Funktors ist, während x eine strikt niedrigere Priorität bezeichnet.

    • Präfix: fx , fy
    • Infix: xfx (nicht assoziativ), xfy (rechts assoziativ), yfx (links assoziativ)
    • Postfix: xf , yf

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow