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))
然后使用 ones
、 integers
和 div-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, ...