2015/12/17

SICP 問題 3.75

バグを探す問題

(define (make-zero-crossings input-stream last-value)
  (let ((avpt (/ (+ (stream-car input-stream) last-value) 2)))
    (cons-stream (sign-change-detector avpt last-value)
                 (make-zero-crossings (stream-cdr input-stream)
                                      avpt))))

;; s1 s2 s3という順番でストリームが流れてくる時,この手続きでは
;; s1とs2の平均a1をとし,次のs3のところでa1とs3の平均a2とする.
;; ここではs2とs3の平均をとってa2として欲しいので引数を一つ増やす.
(define (make-zero-crossings input-stream last-value last-avpt)
  (let* ((s1 (stream-car input-stream))
         (avpt (/ (+ s1 last-value) 2)))
    (cons-stream (sign-change-detector avpt last-avpt)
                 (make-zero-crossings (stream-cdr input-stream)
                                      s1 avpt))))

© 2022 wat-aro