Prolog Language
operatörer
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
ellerfx
därf
indikerar funktorns position ochx
ochy
anger positionerna för argumenten.y
betecknar en term med en prioritet som är lägre eller lika med funktorns företräde, medanx
betecknar en strikt lägre prioritet.- Prefix:
fx
,fy
- Infix:
xfx
(inte associerande),xfy
(höger associativ),yfx
(vänsterassociativ) - Postfix:
xf
,yf
- Prefix:
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 |