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. - It is not allowed to define the empty list (
[]
) or the curly-bracket pair ({}
) as operators.
In SWI-Prolog, operators are local to a module (see also
section 6.8). 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.
1200 | xfx | --> , :- |
1200 | fx | :- , ?- |
1150 | fx | dynamic, discontiguous, initialization, meta_predicate, module_transparent, multifile, public, thread_local, thread_initialization, volatile |
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 | $ |