### 9.2.1 Arithmetic terms

The arithmetic predicates introduced earlier are a good example of this. As was mentioned in Chapter 5, /, `-`, `*`, and `\` are functors, and arithmetic expressions such as `  2+3` are terms. And this is not an analogy. Apart from the fact that we can evaluate them with the help of `is`, for Prolog strings of symbols such as `2+3` really are `identical` with ordinary complex terms:

`?- 2+3 == +(2,3).yes ?- +(2,3) == 2+3.yes ?- 2-3 == -(2,3).yes ?- *(2,3) == 2*3.yes ?- 2*(7+2) == *(2,+(7,2)).yes`

In short, the familiar arithmetic notation is there for our convenience. Prolog doesn't regard it as different from the usual term notation.

Similar remarks to the arithmetic comparison predicates `<`, `=<`, `=:=`, `=\=`, `>` and `>=`:

`?- (2 < 3) == <(2,3).yes ?- (2 =< 3) == =<(2,3).yes ?- (2 =:= 3) == =:=(2,3).yes ?- (2 =\= 3) == =\=(2,3).yes ?- (2 > 3) == >(2,3).yes ?- (2 >= 3) == >=(2,3).yes`

Two remarks. First these example show why it's nice to have the user friendly notation (would you want to have to work with expressions like `=:=(2,3)`?). Second, note that we enclosed the left hand argument in brackets. For example, we didn't ask

`2 =:= 3 == =:=(2,3).`

`(2 =:= 3) == =:=(2,3).`
Why? Well, Prolog finds the query `2 =:= 3 == =:=(2,3)` confusing (and can you blame it?). It's not sure whether to bracket the expressions as `(2 =:= 3) == =:=(2,3)` (which is what we want), or `2 =:= (3 == =:=(2,3))`. So we need to indicate the grouping explicitly.
One final remark. We have now introduced three rather similar looking symbols, namely `=`, `==`, and `=:=` (and indeed, there's also `\=`, `\==`, and `=\=`). Here's a summary:
 `=` The unification predicate. ` ` Succeeds if it can unify its arguments, fails otherwise. `\=` The negation of the unification predicate. ` ` Succeeds if `=` fails, and vice-versa. `==` The identity predicate. ` ` Succeeds if its arguments are identical, fails otherwise. `\==` The negation of the identity predicate. ` ` Succeeds if `==` fails, and vice-versa. `=:=` The arithmetic equality predicate. ` ` Succeeds if its arguments evaluate to the same integer. `=\=` The arithmetic inequality predicate. ` ` Succeeds if its arguments evaluate to different integers.