home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lifeos2.zip / LIFE-1.02 / TESTS / LF / PRIME.LF < prev    next >
Text File  |  1996-06-04  |  1KB  |  53 lines

  1. % FILE. . . . . /_/udir4/_/hassan/life/prime.life
  2. % EDIT BY . . . Hassan Ait-Kaci
  3. % ON MACHINE. . Prlp22
  4. % STARTED ON. . Tue Jan  8 18:38:50 1991
  5.  
  6. % Last modified on Mon Feb 22 04:55:53 1993 by Rmeyer
  7. %      modified on Tue Feb 18 13:50:49 MET 1992 by mezhoud
  8. %      modified on Mon Jun 10 14:48:43 1991 by Hassan
  9.  
  10. % A prime number is a positive integer whose number of proper factors is
  11. % exactly one. This can be expressed in LIFE as:
  12.  
  13.  
  14.  
  15.  
  16. prime :=  P:posint | number_of_factors(P) = one.
  17.  
  18. posint := I:int | I>0.
  19.  
  20.     number_of_factors(N)    -> cond    (N<2,
  21.                                {},
  22.                            factors_from(N,2) 
  23.                     ).
  24.  
  25.     factors_from(N:int,P:int)
  26.                   -> cond(P*P>N,
  27.                           one,
  28.                           cond(R:(N/P)=:=floor(R),
  29.                                 many,
  30.                                 factors_from(N,P+1) 
  31.                         ) 
  32.                     ).
  33.  
  34. primes_to(N:int) :-    write(posint_stream_to(N) & prime), 
  35.             nl,
  36.             fail.
  37.  
  38. primes_to_gc(N:int) :-    write(posint_stream_to(N) & prime),
  39.             nl,
  40.             gc,
  41.             fail.
  42.  
  43.     posint_stream_to(N:int) -> cond(N<1,
  44.                        {},
  45.                        {1;1+posint_stream_to(N-1)}
  46.                     ).
  47.     
  48. all_primes :-         write(posint_stream & prime), 
  49.             nl, 
  50.             fail.
  51.  
  52.     posint_stream         -> {2;1+posint_stream}.
  53.