SICP問題3.76
各要素が入力ストリームの二つの連続する要素の平均であるストリームを生じる手続きsmoothの定義
(define (smooth input-stream) (define (iter s) (cons-stream (/ (+ (stream-car s) (stream-car (stream-cdr s))) 2) (iter (stream-cdr s)))) (cons-stream 0 (iter input-stream)))
テスト
(stream-ref-range (smooth sense-data) 0 10) ; 0 ; 3/2 ; 1.75 ; 1.25 ; 0.75 ; 0.2 ; -1.05 ; -5/2 ; -5/2 ; -1.25 ; #<undef>
元々のmake-zero-crossings(教科書で定義)を使用してzero-crossingsを再定義
(define (make-zero-crossings input-stream last-value) (cons-stream (sign-change-detector (stream-car input-stream) last-value) (make-zero-crossings (stream-cdr input-stream) (stream-car input-stream)))) (define zero-crossings (make-zero-crossings (smooth sense-data) 0))
テスト
(stream-ref-range zero-crossings 0 20) ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; -1 ; 0 ; 0 ; 0 ; 0 ; 1 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; -1 ; #<undef>