Sök…


Fördefinierade operatörer

Fördefinierade operatörer enligt ISO / IEC 13211-1 och 13211-2:

Prioritet Typ Operatör (s) Använda sig av
1200 XFX :- -->
1200 fx :- ?- Direktiv, fråga
1100 xfy ;
1050 xfy ->
1000 xfy ','
900 fy \+
700 XFX = \\= Termen förening
700 XFX == \\== @< @=< @> @>= Term jämförelse
700 XFX =..
700 XFX is =:= =\= < > =< >= Aritmetisk utvärdering och jämförelse
600 xfy : Modul kvalifikation
500 yfx + - /\ \/
400 yfx * / div mod // rem << >>
200 XFX ** Flytkraft
200 xfy ^ Variabel kvantifiering, heltalskraft
200 fy + - \ Aritmetisk identitet, negation; bitvis komplement

Många system tillhandahåller ytterligare operatörer som en implementeringsspecifik förlängning:

Prioritet Typ Operatör (s) Använda sig av
1150 fx dynamic multifile discontiguous initialization Standarddirektiv
1150 fx mode public volatile block meta_predicate
900 fy spy nospy

Operatörsdeklaration

I Prolog kan anpassade operatörer definieras med op/3 :

op(+Precedence, +Type, :Operator)

  • Förklarar operatören att vara en operatör av en typ med företräde. Operatör kan också vara en lista med namn i vilket fall alla element i listan förklaras vara identiska operatörer.

  • Precedens är ett heltal mellan 0 och 1200, där 0 tar bort deklarationen.

  • Typ är en av: xf , yf , xfx , xfy , yfx , fy eller fx där f indikerar funktorns position och x och y anger positionerna för argumenten. y betecknar en term med en prioritet som är lägre eller lika med funktorns företräde, medan x betecknar en strikt lägre prioritet.

    • Prefix: fx , fy
    • Infix: xfx (inte associerande), xfy (höger associativ), yfx (vänsterassociativ)
    • Postfix: xf , yf

Exempel på användning:

:- op(900, xf, is_true).

X_0 is_true :-
  X_0.

Exempelfråga:

?- dif(X, a) is_true.
dif(X, a).

Terminbeställning

Två termer kan jämföras via standardbeställningen:

variabler @ <nummer @ <atomer @ <strängar @ <strukturer @ <listor

Anmärkningar:

  • Strukturer jämförs alfabetiskt med funktorn först, sedan med arity och slutligen med jämförelsen av varje argument.

  • Listor jämför först efter längd, sedan med varje element.

Beställ operatör Lyckas om
X @ <Y X är mindre än Y i standardordningen
X @> Y X är större än Y i standardordningen
X @ = <Y X är mindre än eller lika med Y i standardordningen
X @> = Y X är större än eller lika med Y i standardordningen

Exempelfrågor:

?- 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.

Termisk jämlikhet

Jämställdhetsoperatör Lyckas om
X = Y X kan förenas med Y
X \ = Y X kan inte förenas med Y
X == Y X och Y är identiska (dvs. de förenas utan att några variabla bindningar förekommer)
X \ == Y X och Y är inte identiska
X =: = Y X och Y är aritmetiskt lika
X = \ = Y X och Y är inte aritmetiskt lika


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow