% További példák a between alkalmazására, és a FOR ciklus szimulálására.
% A \+ (negálás), a >> (bitenként jobbra léptetés), illetve az =:= és az =\=
% (aritmetikai kifejezések értékének egyezése és eltérése) egy-két alkalmazása.

between(N,M,N):- N =< M.
between(N,M,I):- N < M, N1 is N+1, between(N1,M,I).

%---------------------------------------------------------------------------------------


osszetett(X):- X1 is X-1, between(2,X1,Y), (X mod Y) =:= 0.
oszto(X,Z):- X1 is X-1, between(2,X1,Y), (X mod Y) =:= 0, Z=Y.

prim(2).
prim(X):- X>2, \+ osszetett(X).


% Ugyanez direktben, negáció használata nélkül:

prim2(2).
prim2(X):- X>2, X1 is X-1, prim2(X,X1).
prim2(X,2):- (X mod 2) =\= 0.
prim2(X,Y):- Y>2, (X mod Y) =\= 0, Y1 is Y-1, prim2(X,Y1).


%---------------------------------------------------------------------------------------

hatv(A,H,E):-hatv(H,A,1,E).
hatv(H,_,E0,E):-H=:=0,E=E0.
hatv(H,A,E0,E):-H>0,(H/\1=:=1 -> E1 is E0*A; E1 is E0),H1 is H>>1, A1 is A*A, hatv(H1,A1,E1,E).
% Ez utóbbi példában a gyorshatványozás módszerének alkalmazásával számítjuk ki
% az A szám H-adik hatványát, E-t.