; Infinite streams (define ones (cons 1 (delay ones))) (define nat (cons 1 (delay (+str ones nat)))) (define (+str s1 s2) (cons (+ (car s1) (car s2)) (delay (+str (force (cdr s1)) (force (cdr s2)))))) (define (filter p s) (if (p (car s)) (cons (car s) (delay (filter p (force (cdr s))))) (filter p (force (cdr s))))) (define fibs (letrec ((fibgen (lambda (a b) (cons a (delay (fibgen b (+ a b))))))) (fibgen 0 1))) (define (primes) (letrec ((sieve (lambda (s) (cons (car s) (delay (sieve (filter (lambda (n) (> (remainder n (car s)) 0)) (force (cdr s))))))))) (sieve (force (cdr nat))))) (define (print s) (write (car s)) (print (force (cdr s))))