You have already seen how to represent alternative ways of satisfying a particular goal by giving more than one clause which could match that goal. For example, we could write a program to decide whether or not any number was between two other numbers using the following two clauses:

between(N, N1, N2):- N > N1, N < N2. between(N, N1, N2):- N < N1, N > N2.

This program states that `N`

is between two numbers `N1`

and
`N2`

if ** either** `N`

is greater than `N1`

and `N`

is
less than `N2`

** or** `N`

is less than `N1`

or `N`

is greater than `N2`

. This could be stated more succinctly using the
special disjunction operator, ``;'`

, which is often interpreted in
English as "or".

between(N, N1, N2):- (N > N1, N < N2) ; (N < N1, N > N2).

The brackets round the conjunction of inequalities on each side of
the disjunction operator aren't really necessary. We have included
them to emphasise the nested structure of the term.
This new definition of `between/3`

using the ``;'`

operator
is identical in meaning to the original definition using two separate clauses.

Tue Jul 7 10:44:26 BST 1998