Previous: Lists, Up: Syntax


3.7 Operators

Below is the table of operators used in Pedro. The table lists the declarations of the operators as used in Prolog. In Prolog, the declaration op(Prec, Assoc, Ops) declares the list of operators Ops to have precedence Pred and associativity Assoc. The smaller the precedence, the more tightly the operator binds. For the associativity argument xfy describes a right-associative infix operator, xfx describes a non-associative infix operator, yfx describes a left-associative infix operator, and fy describes an associative prefix operator.

     op(1100, xfy, [ ; ]).
     op(1050, xfy, [ -> ]).
     op(1000, xfy, [ ',' ]).
     op(700, xfx, [ = , is, < , =< , > , >= ]).
     op(500, yfx, [ + , - , /\ , \/ ]).
     op(400, yfx, [ * , / , // , rem , mod , << , >> ]).
     op(200, xfx, [ ** ]).
     op(200, fy, [ + , - ]).
     op(100, xfx, [ @ ]).
     op(50, xfx, [ : ]). 

Examples:

     The string "X is A + - B + C*D" parses to the term is(X, +(+(A, -(B)), *(C, D)))
     The string "G1 -> G2 ; G3" parses to the term ;(->(G1, G2), G3)

Note that comma is used both as an argument separator and as an infix operator. Each operator used at the top-level of an argument of a list or compound term has to have precedence less than 1000. If an argument has an operator of higher precedence then the argument needs to be enclosed in brackets.

Examples:

     The string "f((G1, G2))" parses to the compound term f(','(G1, G2))
     The string "[G, (G1;G2)]" parses to the list [G, ;(G1, G2)]