#include "List.h"
List range(int,int); /* proto */


List filterMultiples(int P, List L)                       /*A*/
 { if(L==NULL) return NULL;                               /*l*/
   /*else*/                                               /*l*/
   if(L->hd % P == 0) return filterMultiples(P, L->tl);   /*i*/
   else   return cons(L->hd, filterMultiples(P, L->tl));  /*s*/
 }/*filterMultiples*/                                     /*on*/


List sieve(List L)
 { if(L==NULL) return NULL;
   /*else*/
   return cons(L->hd, /* known prime */
               sieve(filterMultiples(L->hd, L->tl)));
 }/*sieve*/


List primes(int N)
/* return a List of the prime numbers between 2 and N inclusive */
 { return sieve( range(2/*is prime*/, N) ); }


/* Sieve of Eratosthenese,  Set of Int by List */
