next up previous
Next: Arithmetic in Prolog Up: Operators Previous: Precedence

Associativity

Precedence involves the case where there are different operators in a single expression. Associativity involves multiple occurrences of the same operator. For example, gives different results depending on whether it is treated as (i.e. 0), or (i.e. 2). In arithmetic it is the first order which is conventional: the left-most pair of numbers is evaluated first, then the next left-most, and so on. The subtraction operator is said to be left-associative. Precedence and associativity are defined in Prolog with the built-in predicate op/3. The first argument determines precedence, the second associativity and the third defines the operator symbol. i.e.
op(Precedence,Associativity,Operator)
The associativity argument is also used to declare whether the operator is an infix operator (like the arithmetical ones), a prefix operator or a postfix operator. The precedence argument is an integer. The principle is: the lower the number, the higher the precedence. In Sicstus Prolog, the arithmetical operators have the following precedence values:
Operator Precedence Value
+ 500
- 500
* 400
/ 400
The conventions for defining the order (prefix, infix and postfix) and associativity (left, right, none) of operators are as follows, where f stands for the position of the operator and x and y for its arguments:
Prefix Postfix Infix Associativity
fx xf xfx none
  yf yfx left
fy   xfy right
The occurrence of the argument symbol y indicates that an expression may contain multiple occurrences of the operator in question, and its position (left or right of f) indicates whether it is left or right associative. The set of built-in operators and their properties can be explored by use of the built-in predicate current_op/3:
|?- current_op(Precedence,Associativity,Operator).

Operator = sequential,

Precedence = 1150,

Associativity = fx ?

yes
Forcing Prolog to backtrack, producing further responses, by using semi-colon <return> will produce a complete listing of all the operators know to the system at the time the goal is posed.
next up previous
Next: Arithmetic in Prolog Up: Operators Previous: Precedence
Steve Harlow 2001-11-26