Definimos o predicado ifthenelse pelas duas cláusulas seguintes (pela ordem indicada ...):
ifthenelse(X,Y,Z) :- call(X), !, call(Y). ifthenelse(X,Y,Z) :- call(Z).
Consideremos agora um programa P ao qual juntamos estas duas cláusulas.1 Consideremos uma chamada ao procedimento ifthenelse(X,Y,Z) onde X, Y, Z estão respectivamente instanciados pelos átomos (= chamadas de procedimentos) A, B, C. (De facto não é necessariamente verdade que X, Y, Z estejam instanciados por A, B, C no momento da chamada a ifthenelse. É suficiente que assim seja no momento das chamadas correspondentes a call.) Examinando a árvore de procura, vemos que o controlo é primeiro passado a A e que em seguida, se A tiver êxito, o controlo é passado a B não havendo retrocesso; se A falhar em tempo finito, o controlo é passado a C. Uma leitura natural para ifthenelse(X,Y,Z) é então:
Se X Então Y Senão Z.