home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / prolog / brklyprl.lha / Emulator / Benchmarks / pri2.pl < prev    next >
Encoding:
Text File  |  1989-04-14  |  619 b   |  26 lines

  1.  
  2. /* Copyright (C) 1988, 1989 Herve' Touati, Aquarius Project, UC Berkeley */
  3.  
  4. % The sieve of Eratosthenes, from Clocksin & Mellish (pri2)
  5. %    finding the prime numbers up to 98.    
  6.  
  7. main :- primes(98, X), write(X), nl.
  8.  
  9. primes(Limit, Ps) :- integers(2, Limit, Is), sift(Is, Ps).
  10.  
  11. integers(Low, High, [Low | Rest]) :- 
  12.     Low =< High, !,
  13.     M is Low+1,
  14.     integers(M, High, Rest).
  15. integers(_,_,[]).
  16.  
  17. sift([],[]).
  18. sift([I | Is], [I | Ps]) :- remove(I,Is,New), sift(New, Ps).
  19.  
  20. remove(P,[],[]).
  21. remove(P,[I | Is], Nis) :- 0 is I mod P, !, remove(P,Is,Nis).
  22. remove(P,[I | Is], [I | Nis]) :- not(0 is I mod P), !, remove(P,Is,Nis).
  23.  
  24.  
  25.  
  26.