Lambda Calculus Primes – Sieve of Eratosthenese.
Note the use of "infinite" lists, e.g., from 2 = 2, 3, 4, 5, ... , in the functional-programming Sieve of Eratosthenese algorithm.
let rec
   first = lambda n. lambda l.
      if n=0 then nil
      else (hd l)::(first (n-1) tl l),
   from = lambda n. n::(from (n+1))
in let rec
   filter = lambda f. lambda l. {remove multiples}
      if null l then nil        {of f from l     }
      else if hd l/f*f = hd l then filter f  tl l
      else hd l :: filter f  tl l,
   sieve = lambda l.
      if null l then nil
      else let p = hd l { prime }
           in p :: sieve (filter  p  tl l)
in first 10 ( sieve (from 2) )
{\fB Sieve of Eratosthenes. \fP}
Also see compositeQ.