/*
Ez csak "szorgalmi" feladat, példa a ;/2 és a ->/2 használatára. (pontosvessző, ill. nyíl operátorok)
Nézze meg őket a help-ben, de azt hiszem, még nem ért meg belőle minden magyarázatot.

Ha megtetszett, nyugodtan használhatja, csak mindig gondolja át alaposan. 
(Ez olyan, mint az if-then szelekció.)

Vegye észre, hogy mi az első elágazás hibája. Ehhez nem kell help. 
(Csak futtatáskor a válasz után pontosvessző :))



Indítás, pl. elagazas1(2,Y).

Utána ugyanígy próbálja ki a többit is. 

Időnként használjon nyomkövetést!

*/


elagazas1(X,Y) :- X < 0, Y is -X.
elagazas1(X,Y) :- X < 2, Y is 2*X.
elagazas1(X,Y) :- X < 10,Y is 5*X. 
elagazas1(X,Y) :- Y is X, write('túl nagy szám'). 


/*
Rájött a hibára? 
(több megoldás is van, holott nem lehetne)

*/


elagazas2(X,Y) :- (X < 0 , Y is -X) ;
		  (X < 2 , Y is 2*X);
		  (X < 10, Y is 5*X);
		  Y is X, write('túl nagy szám'). 



elagazas3(X,Y) :- (X < 0 -> Y is -X) ;
		  (X < 2 -> Y is 2*X);
		  (X < 10 -> Y is 5*X); 
		  Y is X, write('túl nagy szám'). 


/*

Figyelje meg, hogy volt-e többszörös megoldás az elagazas3-ban!

*/


/*

A többszörös megoldás az előző változatokban is megakadályozható, így:

*/

elagazas4(X,Y) :- X < 0, Y is -X,!.
elagazas4(X,Y) :- X < 2, Y is 2*X,!.
elagazas4(X,Y) :- X < 10,Y is 5*X,!. 
elagazas4(X,Y) :- Y is X, write('túl nagy szám'). 


/* 
A szabály végén látható ! jel a cut operátor (ld. help) - 
esetünkben megakadályozza a visszalépést, így a többszörös megoldást is.
A pontos működést majd kicsit később vesszük.
*/



/*
Figyelje meg, hogy cut nélkül a "->" sem akadályozza meg a továbblépést:

*/

elagazas5(X,Y) :- X < 0 -> Y is -X.
elagazas5(X,Y) :- X < 2 -> Y is 2*X.
elagazas5(X,Y) :- X < 10 -> Y is 5*X. 
elagazas5(X,Y) :- Y is X, write('túl nagy szám'). 


/*
Ezt jelenti a help "Please  note that (If -> Then) acts  as (If -> Then ; fail)"
mondata, vagyis esetünkben azt, hogy a pontosvessző hatására (kikényszerített sikertelenség)
a másik ágon folytatja.


Akkor miért működik jól az elagazas3?
Mert ott a help-ben írtaknak ez a része teljesül:
If -> Then; _Else :- If, !, Then.
If -> _Then; Else :- !, Else.

vagyis pl. az
(X < 0 -> Y is -X) ;
		  (X < 2 -> Y is 2*X);
azt jelenti, hogy ha rátér az "else" ágra, akkor már ne léphessen vissza.


*/