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,fyellerfxdärfindikerar funktorns position ochxochyanger positionerna för argumenten.ybetecknar en term med en prioritet som är lägre eller lika med funktorns företräde, medanxbetecknar 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 |