(define (enumerate-to from to step) (if (> from to) the-empty-stream (cons-stream from (enumerate-to (+ from step) to step)))) (define (map s action) (if (eq? the-empty-stream s) the-empty-stream (cons-stream (action (head s)) (map (tail s) action)))) (define (combine s1 s2 combiner) (cond ((eq? (head s1) the-empty-stream) s2) ((eq? (head s2) the-empty-stream) s1) (else (cons-stream (combiner (head s1) (head s2)) (combine (tail s1) (tail s2) combiner))))) (define (accumulate-n operator S) (cond ((empty-stream? s) the-empty-stream) ((empty-stream? (tail s)) (head s)) (else (accumulate-n operator (cons-stream (combine (head s) (head (tail s)) operator) (tail (tail s))))))) (define triplet-stream (map (enumerate-to 0 3 1) (lambda (x) (enumerate-to (1+ (* 3 x)) (+ 3 (* 3 x)) 1)))) (define accu-stream (accumulate-n + triplet-stream)) (define (first n stream) (if (= n 0) (begin (newline) the-non-printing-object) (begin (display (head stream)) (display " ") (first (-1+ n) (tail stream)))))