% 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.