Prolog Language
operators
Zoeken…
Vooraf gedefinieerde operators
Vooraf gedefinieerde operators volgens ISO / IEC 13211-1 en 13211-2:
Prioriteit | Type | Operator (s) | Gebruik |
---|---|---|---|
1200 | XFX | :- --> | |
1200 | fx | :- ?- | Richtlijn, vraag |
1100 | xfy | ; | |
1050 | xfy | -> | |
1000 | xfy | ',' | |
900 | foei | \+ | |
700 | XFX | = \\= | Term-unificatie |
700 | XFX | == \\== @< @=< @> @>= | Term vergelijking |
700 | XFX | =.. | |
700 | XFX | is =:= =\= < > =< >= | Rekenkundige evaluatie en vergelijking |
600 | xfy | : | Module kwalificatie |
500 | yfx | + - /\ \/ | |
400 | yfx | * / div mod // rem << >> | |
200 | XFX | ** | Float power |
200 | xfy | ^ | Variabele kwantificatie, integer vermogen |
200 | foei | + - \ | Rekenkundige identiteit, ontkenning; beetje bij beetje aanvullen |
Veel systemen bieden verdere operators als een implementatie-specifieke uitbreiding:
Prioriteit | Type | Operator (s) | Gebruik |
---|---|---|---|
1150 | fx | dynamic multifile discontiguous initialization | Standaard richtlijnen |
1150 | fx | mode public volatile block meta_predicate | |
900 | foei | spy nospy |
Operator verklaring
In Prolog kunnen aangepaste operators worden gedefinieerd met behulp van op/3
:
op(+Precedence, +Type, :Operator)
Verklaart Operator tot operator van een Type met een Voorrang. Operator kan ook een lijst met namen zijn, in welk geval alle elementen van de lijst als identieke operators worden aangemerkt.
Voorrang is een geheel getal tussen 0 en 1200, waarbij 0 de declaratie verwijdert.
Type is een van:
xf
,yf
,xfx
,xfy
,yfx
,fy
offx
waarbijf
de positie van de functor aangeeft enx
eny
de posities van de argumenten aangeven.y
geeft een term aan met een prioriteit lager of gelijk aan de prioriteit van de functor, terwijlx
een strikt lagere prioriteit aangeeft.- Voorvoegsel:
fx
,fy
- Infix:
xfx
(niet associatief),xfy
(rechts associatief),yfx
(links associatief) - Postfix:
xf
,yf
- Voorvoegsel:
Voorbeeld gebruik:
:- op(900, xf, is_true).
X_0 is_true :-
X_0.
Voorbeeldvraag:
?- dif(X, a) is_true.
dif(X, a).
Termijnbestelling
Twee termen kunnen worden vergeleken via de standaardbestelling:
variabelen @ <getallen @ <atomen @ <strings @ <structuren @ <lijsten
Opmerkingen:
Structuren worden eerst alfabetisch op functor vergeleken, vervolgens op arity en ten slotte op basis van de vergelijking van elk argument.
Lijsten worden eerst op lengte en vervolgens op elk element vergeleken.
Order operator | Lukt als |
---|---|
X @ <Y | X is minder dan Y in de standaardvolgorde |
X @> Y | X is groter dan Y in de standaardvolgorde |
X @ = <Y | X is kleiner dan of gelijk aan Y in de standaardvolgorde |
X @> = Y | X is groter dan of gelijk aan Y in de standaardvolgorde |
Voorbeeldvragen:
?- 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.
Term gelijkheid
Gelijkheid operator | Lukt als |
---|---|
X = Y | X kan worden verenigd met Y |
X \ = Y | X kan niet worden verenigd met Y |
X == Y | X en Y zijn identiek (dwz ze verenigen zonder dat er variabele bindingen optreden) |
X \ == Y | X en Y zijn niet identiek |
X =: = Y | X en Y zijn rekenkundig gelijk |
X = \ = Y | X en Y zijn niet rekenkundig gelijk |