SICP 問題 3.74
last-valueを取る代わりにmapのargstreamsの二つ目に一回分遅らせたsense-dataをとればいい.
そうすれば今の値と前回の値を比べて零交差だったかをsign-change-detectorで判定できる.
(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 sense-data 0)) (define (stream-map proc . argstreams) (if (stream-null? (car argstreams)) the-empty-stream (cons-stream (apply proc (map stream-car argstreams)) (apply stream-map (cons proc (map stream-cdr argstreams)))))) (define zero-crossings (stream-map sign-change-detector sense-data (cons-stream 0 sense-data)))