xf
, yf
,
xfx
, xfy
, yfx
, fy
or
fx
. The‘f
’indicates the position
of the functor, while
x
and y
indicate the position of the
arguments.‘y
’should be interpreted as “on
this position a term with precedence lower or equal to the precedence of
the functor should occur” . For‘x
’the
precedence of the argument must be strictly lower. The precedence of a
term is 0, unless its principal functor is an operator, in which case
the precedence is the precedence of this operator. A term enclosed in
parentheses ( ...
has precedence 0.
The predefined operators are shown in table 5. Operators can be redefined, unless prohibited by one of the limitations below. Applications must be careful with (re-)defining operators because changing operators may cause (other) files to be interpreted differently. Often this will lead to a syntax error. In other cases, text is read silently into a different term which may lead to subtle and difficult to track errors.
- It is not allowed to redefine the comma (
','
). - The bar (
|
) can only be (re-)defined as infix operator with priority not less than 1001.
In SWI-Prolog, operators are local to a module (see also
section 6.9). Keeping
operators in modules and using controlled import/export of operators as
described with the module/2
directive keep the issues manageable. The module system
provides the operators from table
5 and these operators cannot be modified. Files that are loaded from
the SWI-Prolog directories resolve operators and predicates from this system
module rather than user
, which makes the semantics of the
library and development system modules independent of operator changes
to the user
module. See section
4.25 for details about the relation between operators and modules.
1200 | xfx | --> , :- , => |
1200 | fx | :- , ?- |
1150 | fx | dynamic, discontiguous, initialization, meta_predicate, module_transparent, multifile, public, thread_local, thread_initialization, volatile |
1105 | xfy | | |
1100 | xfy | ; |
1050 | xfy | -> , *-> |
1000 | xfy | , |
990 | xfx | := |
900 | fy | \+ |
700 | xfx | < , = , =.. , =@= , \=@= ,
=:= , =< , == ,
=\= , > , >= , @< , @=< , @> ,
@>= , \= , \== , as, is,
>:< , :< |
600 | xfy | : |
500 | yfx | + , - , /\ , \/ , xor |
500 | fx | ? |
400 | yfx | * , / , // , div, rdiv,
<< , >> , mod, rem |
200 | xfx | ** |
200 | xfy | ^ |
200 | fy | + , - , \ |
100 | yfx | . |
1 | fx | $ |