		/* Naive prime number testing */

mode none.
closure none.

prime(2) equals true.
prime(X) equals if X<2 then false else relprime(X, iota(2, approx_sqrt(X))).

   relprime(X, [])    equals true.
   relprime(X, [D|T]) equals if (X/D)*D <> X then relprime(X,T) else false.
				% a built-in mod function 
				% would have helped here

   iota(Lo,Hi) equals if eq(Lo,Hi) then [Hi] else [Lo | iota(Lo+1,Hi)].

   approx_sqrt(X) equals iterate(2,X).

	iterate(N,X) equals if (N*N) >= X then N else iterate(N+1, X).
