(define (make-int-channel n) (let ((channel (make-sync-channel))) (spawn (lambda () (let loop ((i n)) (send-sync channel i) (loop (+ 1 i))))) channel)) (define (remove-multiples factor channel) (let ((out-channel (make-sync-channel))) (spawn (lambda () (let loop () (let ((i (receive-sync channel))) (if (not (zero? (remainder i factor))) (send-sync out-channel i)) (loop))))) out-channel)) (define (prime-channel) (let ((primes (make-sync-channel))) (spawn (lambda () (let loop ((channel (make-int-channel 2))) (let ((factor (receive-sync channel))) (send-sync primes factor) (loop (remove-multiples factor channel)))))) primes)) (define (write-channel channel) (let loop () (write (receive-sync channel)) (newline) (loop)))