さかもとのブログ

つらつらと

SICP演習問題3.73~3.74

;;exercise3.73
(define (rc-circuit r c dt)
  (lambda (i v0)
    (add-stream
     (scale-stream i r)
     (integral
      (scale-stream i (/ 1.0 c)) v0 dt))))

;;exercise3.74
;;例題を参照した
;;sinを使ってsense-dataを生成してみる
(define sense-data
  (stream-map (lambda (x) (sin x)) integers))
(stream-ref-print sense-data 10)

(define (sign-change-detector input last-input)
  (if (>= (* input last-input) 0) 0
      (if (> last-input 0) -1 1)))

;;問題で与えられたmake-zero-crossing
(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))

(stream-ref-print zero-crossings 10)

(define zero-crossings
  (stream-map sign-change-detector
              sense-data
              (cons-stream 0 sense-data)))