<< Previous exercise (3.63) | Index | Next exercise (3.65) >>
(define (stream-limit stream tolerance)
(define (good-enough? a b)
(< (abs (- a b)) tolerance))
(define (loop s)
(let ((a (stream-ref s 0))
(b (stream-ref s 1)))
(if (good-enough? a b)
b
(loop (stream-cdr s)))))
(loop stream))
(define (sub-streams stream1 stream2) (stream-map - stream1 stream2)) (define (one-order-difference stream) (sub-streams (stream-cdr stream) stream)) (define (stream-limit stream tolerance) (define (iter tolerance-stream stream) (if (<= (abs (stream-car tolerance-stream)) tolerance) (stream-car stream) (iter (stream-cdr tolerance-stream) (stream-cdr stream)))) (iter (one-order-difference stream) (stream-cdr stream)))
(define (stream-limit stream tolerance) (if (< (abs (- (stream-ref stream 1) (stream-ref stream 0))) tolerance) (stream-ref stream 1) (stream-limit (stream-cdr stream) tolerance)))