(add-to-load-path (dirname (current-filename))) (import (srfi srfi-41) (extra-functional) (my-streams)) (define base (stream-from 2)) (define (mark n item) (if (eq? (remainder (car item) n) 0) (cons (car item) #f) item)) (define-stream (sieve input) (stream-let loop ((strm (stream-map (part (flip cons) #t) input))) (stream-match strm ((item . rest) (if (cdr item) (stream-cons (car item) (loop (stream-map (part mark (car item)) rest))) (loop rest)))))) (define eratosthenes (sieve base))