; Procedures for streams defined in the book which are not included with ; mit-scheme by default. (define (display-line x) (newline) (display x)) (define (display-stream s) (stream-for-each display-line s)) (define (stream-enumerate-interval low high) (if (> low high) the-empty-stream (cons-stream low (stream-enumerate-interval (+ low 1) high)))) (define (add-streams s1 s2) (stream-map + s1 s2)) (define ones (cons-stream 1 ones)) (define integers (cons-stream 1 (add-streams ones integers))) (define (scale-stream stream factor) (stream-map (lambda (x) (* x factor)) stream)) ; Returns first n elements of stream as a list (define (stream-prefix stream n) (cond ((stream-null? stream) '()) ((= n 0) '()) (else (cons (stream-car stream) (stream-prefix (stream-cdr stream) (- n 1)))))) (define (stream-ref s n) (if (= n 0) (stream-car s) (stream-ref (stream-cdr s) (- n 1)))) (define (stream-filter pred stream) (cond ((stream-null? stream) the-empty-stream) ((pred (stream-car stream)) (cons-stream (stream-car stream) (stream-filter pred (stream-cdr stream)))) (else (stream-filter pred (stream-cdr stream)))))