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
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
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, [ : ]).
"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.
"f((G1, G2))"parses to the compound term
f(','(G1, G2))The string
"[G, (G1;G2)]"parses to the list
[G, ;(G1, G2)]