练习 3.59

a)

integrate-series 的定义非常直接:接受一个流 \(a_0, a_1, a_2, \ldots\) ,返回另一个流 \(a_0, (\frac{1}{2})a_1, (\frac{1}{3})a_2, (\frac{1}{4})a_3, \ldots\)

流的每个元素 \((\frac{1}{i})a_{i-1}\) 的乘积可以用 mul-streams 计算得出,另外还需要一个 div-streams 过程来定义流 \(\frac{1}{1}, \frac{1}{2}, \frac{1}{3}, \ldots\) ,它的定义如下:

;;; 59-div-streams.scm

(define (div-streams s1 s2)
    (stream-map / s1 s2))

然后使用 onesintegersdiv-streams 定义流 \(\frac{1}{1}, \frac{1}{2}, \frac{1}{3}, \ldots\)

1 ]=> (load "59-div-streams.scm")

;Loading "59-div-streams.scm"... done
;Value: div-streams

1 ]=> (load "p228-ones.scm")

;Loading "p228-ones.scm"... done
;Value: ones

1 ]=> (load "p228-integers.scm")

;Loading "p228-integers.scm"...
;  Loading "p228-add-streams.scm"... done
;  Loading "p228-ones.scm"... done
;... done
;Value: integers

1 ]=> (stream-head (div-streams ones integers) 10)

;Value 11: (1 1/2 1/3 1/4 1/5 1/6 1/7 1/8 1/9 1/10)

最后,给出 integrate-series 的定义:

;;; 59-integrate-series.scm

(load "54-mul-streams.scm")
(load "59-div-streams.scm")
(load "p228-ones.scm")
(load "p228-integers.scm")

(define (integrate-series a)
    (mul-streams a                                  ; a0, a1, a2, ...
                 (div-streams ones integers)))      ; 1/1, 1/2, 1/3, ...

b)

讨论

blog comments powered by Disqus