// Finds primes using Erastotenes sieve primes(Res) :- Once sieve(2,[],Res). sieve(limit,Res,Res). sieve(Num,Primes,Res) :- Once (Num==2 \/ Num%2 * sift(Num,Primes) * delete * `Num1=Num+1` * sieve(Num1,[Num|Primes],Res) + delete * `Num1=Num+1` * sieve(Num1,Primes,Res)). sift(_,[]). sift(Num,[Head|Tail]) :- Num%Head * sift(Num,Tail). // is prime?