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 of fx waarbij f de positie van de functor aangeeft en x en y de posities van de argumenten aangeven. y geeft een term aan met een prioriteit lager of gelijk aan de prioriteit van de functor, terwijl x een strikt lagere prioriteit aangeeft.

    • Voorvoegsel: fx , fy
    • Infix: xfx (niet associatief), xfy (rechts associatief), yfx (links associatief)
    • Postfix: xf , yf

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow