SICP問題3.59
2010/02/24 cosine-seriesのコードを間違えていたので修正
a.
級数の積分はcを任意の定数として
である
をとり、級数の積分の定数項を除いた項の係数のストリームを返す手続きintegrate-seriesを定義する
(define (integrated-series s) (stream-map / s integers))
テスト
(stream-ref (integrated-series ones) 1) ; 1/2 (stream-ref (integrated-series ones) 2) ; 1/3 (stream-ref (integrated-series ones) 3) ; 1/4 (stream-ref (integrated-series ones) 4) ; 1/5 (stream-ref (integrated-series ones) 5) ; 1/6 (stream-ref (integrated-series ones) 6) ; 1/7
OK.
b.
関数は同じ微分を持つ。つまりとの積分はの定数項を除いて同じ級数である。従っての級数を
(define exp-series (cons-stream 1 (integrate-series exp-series)))
で生成できる。正弦の微分が余弦であり、余弦の微分が正弦の符号を変えたものであるという事実から出発し、正弦と余弦の級数を生成する方法を示せ、という問題で正直良く分からないのですが、書いてあるとおりに素直に実装。
余弦の微分が正弦の符号を変えたもの → 正弦の積分の符号を変えたものが余弦
(define cosine-series (cons-stream 1 (stream-map - (integrated-series sine-series))))
(define sine-series (cons-stream 0 (integrated-series cosine-series)))
という感じでOKかな?
以下はこの問題を解くのに必要な定義(教科書で定義)
(define integers (cons-stream 1 (add-streams ones integers))) (define ones (cons-stream 1 ones)) (define (add-streams s1 s2) (stream-map + s1 s2))