; Re-implementation of cons-stream and cdr-stream (which are ; predefine in scm.) (define-macro (cons-stream head tail) `(cons ,head (lambda () ,tail))) (define (cdr-stream str) (if (procedure? (cdr str)) ; Compute and memoize tail (set-cdr! str ((cdr str)))) (cdr str)) ;; All 1's (define ones (cons-stream 1 ones)) ;; Sums of corresponding elements of infinite streams a and b (define (add-streams a b) (cons-stream (+ (car a) (car b)) (add-streams (cdr-stream a) (cdr-stream b)))) ;; The stream 1 2 3 ... (define nums (cons-stream 1 (add-streams ones nums))) ;; The Fibonacci sequence (define fib (cons-stream 1 ; Alternatively, start with 0. (cons-stream 1 (add-streams fib (cdr-stream fib)))))