SICP 全笔记

Exercise 3.55. Define a procedure partial-sums that takes as argument a stream S and returns the stream whose elements are S0, S0 + S1, S0 + S1 + S2, .... For example, (partial-sums integers) should be the stream 1, 3, 6, 10, 15, ....

这里的 partial-sums 即前 n 项和组成的列表。

如果我们求 (partial-sums integers) 那么我们得到的列表各项应该为

  1. integers 的第一项
  2. partial-sums 的第一项 + integers 的第二项
  3. partial-sums 的第二项 + integers 的第三项
  4. 以此类推

所以我们需要把 partial-sums 保存下来,以便在求第 n 项的时候,我们可以使用 partial-sums 中的第 n - 1 项 + integers 的第 n 项。这与之前的 factorials 练习 3.54 是一样的。

(load "stream.scm")
(load "50-stream-map.scm")
(load "integer-stream.scm")

(define (partial-sums s)
  (define partial (cons-stream (stream-car s)
                               (add-streams partial (stream-cdr s))))
  partial)