<< Prev | - Up - | Next >> |
Although our second try in using a cut in the max
predicate to make it more efficient went wrong, the argument that we used when placing the cut in the first clause and then deleting the test X>Y
from the second clause seems sensible: if we have already tested whether X
is smaller or equal to Y
and we have found out that it is not, we don't have to test whether X
is greater than Y
as well (we already know this).
There is a built-in predicate construction in Prolog which allows you to express exactly such conditions: the if-then-else construct. In Prolog, if A then B else C is written as ( A -> B ; C)
. To Prolog this means: try A
. If you can prove it, go on to prove B
and ignore C
. If A
fails, however, go on to prove C
ignoring B
. The max
predicate using the if-then-else construct looks as follows:
max(X,Y,Z) :-
( X =< Y
-> Z = Y
; Z = X
).
<< Prev | - Up - | Next >> |