(define ones (cons-stream 1 ones)) (define integers (cons-stream 1 (add-streams ones integers))) (define (partial-sums s) (define stream (cons-stream 0 (add-streams s stream))) (stream-cdr stream)) (define (add-streams s1 s2) (stream-map + s1 s2)) (define (display-stream-n s limit) (define (go n) (cond ((= n limit) "...") (else (display (stream-ref s n)) (newline) (go (+ n 1))))) (go 0)) (define (number-stream-n s limit) (define (go n) (cond ((= n limit) "...") (else (display n) (display " ") (display (stream-ref s n)) (newline) (go (+ n 1))))) (go 0)) (define (interleave s t) (cons-stream (stream-car s) (interleave t (stream-cdr s)))) (define (pairs s t) (cons-stream (list (stream-car s) (stream-car t)) (interleave (stream-map (lambda (x) (list (stream-car s) x)) (stream-cdr t)) (pairs (stream-cdr s) (stream-cdr t))))) (define (interleave-3 s t u) (cons-stream (stream-car s) (interleave-3 t u (stream-cdr s)))) (define (merge-weighted s t weight) (cond ((stream-null? s) t) ((stream-null? t) s) ((< (weight (stream-car s)) (weight (stream-car t))) (cons-stream (stream-car s) (merge-weighted (stream-cdr s) t weight))) (else (cons-stream (stream-car t) (merge-weighted s (stream-cdr t) weight))))) (define (weighted-pairs s t weight) (cons-stream (list (stream-car s) (stream-car t)) (merge-weighted (stream-map (lambda (x) (list (stream-car s) x)) (stream-cdr t)) (weighted-pairs (stream-cdr s) (stream-cdr t) weight) weight)))