問題3.74 – SICP(計算機プログラムの構造と解釈)その164

問題3.74

ストリーム sense-data を三角関数を使って仮に表現する。

(define sense-data
  (stream-map (lambda (x) (sin x)) integers))

(stream-head sense-data 10)
gosh> 0.8414709848078965
0.9092974268256817
0.1411200080598672
-0.7568024953079282
-0.9589242746631385
-0.27941549819892586
0.6569865987187891
0.9893582466233818
0.4121184852417566
-0.5440211108893699
done

Alyssa の zero-crossings 手続き

(define (sign-change-detector s2 s1)
  (cond ((and (<= 0 s2) (> 0 s1)) 1)    ;; 負->正 1
        ((and (> 0 s2) (<= 0 s1)) -1)   ;; 正->負 -1
        (else 0)))

(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-head zero-crossings 10)
gosh> 0
0
0
-1
0
0
1
0
0
-1
done

stream-map の一般化した版を使った場合。

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

(stream-head zero-crossings 10)
gosh> 0
0
0
-1
0
0
1
0
0
-1
done
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»