Operators in Prolog are simply a notational convenience. We could
represent the English statement ``2 plus 3'' in Prolog as
+(2, 3) but this
isn't the way we are accustomed to seeing the expression. A more
familiar notation involves making the
+ an INFIX operator so that we
2 + 3. When an operator is defined it is also allocated two
+is 500 while the precedence of
*(the multiplication operator) is 400. The rule is that in a nested term the operator with highest precedence value is the principal functor. For instance, the term
2 + 3 * 5has principal functor
+. If we were to write it in standard Prolog syntax this term would look like this:
+(2,*(3,5)). NOTE that terms representing numerical expressions are NOT automatically evaluated, like in a functional language. There is a special built--in predicate for doing this, which we shall meet later on.
+operator is both prefix (e.g.
+ 2) and infix (e.g.
2 + 3).
You can check what the current operators in your Prolog system are by
current_op/3 built-in predicate. You can also define your
own operators using the built--in
op/3 predicate but we won't worry
about this yet. To display a term containing operators in standard
Prolog syntax, use the built-in predicate
| ?- current_op(Precedence, Type, +). Precedence=500 Type=fx ; Precedence=500 Type=yfx yes | ?- current_op(Precedence, Type, *). Precedence=400 Type=yfx yes | ?- display(2 + 3 + 4). +(+(2,3),4) yes