练习 3.55

使用 练习 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)

讨论

blog comments powered by Disqus