#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 */