使用 练习 3.54 的方法,分析 (partial-sums s)
流,并找出隐藏在其中的流规律:
(partial-sums s) x y
s0 s0
s0 + s1 s0 s1
s0 + s1 + s2 s0 + s1 s2
s0 + s1 + s2 + s3 s0 + s1 + s2 s3
s0 + s1 + s2 + s3 + s4 s0 + s1 + s2 + s3 s4
s0 + s1 + s2 + s3 + s4 + s5 s0 + s1 + s2 + s3 +s 4 s5
... ... ...
分析的结果表明, (partial-sums s)
可以表示为两个流之和: x
流为 (partial-sums s)
本身, y
流则是流 s
:
;;; 55-partial-sums.scm
(load "p228-add-streams.scm")
(define (partial-sums s)
(cons-stream (stream-car s)
(add-streams (partial-sums s)
(stream-cdr s))))
测试:
1 ]=> (load "55-partial-sums.scm")
;Loading "55-partial-sums.scm"...
; Loading "p228-add-streams.scm"... done
;... done
;Value: partial-sums
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 (partial-sums integers) 10)
;Value 12: (1 3 6 10 15 21 28 36 45 55)