Kijk naar het volgende programma dat het minimum bepaalt van 2 getallen.
largest(X,Y,Y):- X =< Y.
largest(X,Y,X):- X > Y.
Dit is zeer mooie code, maar ze is inefficiƫnt. Wanneer we reeds bepaald hebben waarmee X
moet unificeren om largest(1,3,X)
waar te laten zijn, hoeven we niet meer naar de tweede clausule te kijken. Zelfs niet als ze backtracken. Bovendien is het zo dat als de eerste lijn niet waar is, de tweede lijn automatisch waar is. De test X > Y
is dus overbodig. We kunnen door eenvoudigweg wat cuts toe te voegen volgende code bekomen:
largest(X,Y,Y):- X =< Y, !.
largest(X,Y,X).
Zeer elegant!
?- largest(5,3,X).
X = 5.
?- largest(2,9,X).
X = 9.
Maar, men voegt niet zomaar cuts toe1. Het voorgaande programma is fout. Corrigeer de eerste lijn zodat het wel correct werkt.