根据定义, s
的第一个值是 1
,之后每个元素都是两个 s
的值之和,因此 s
产生的序列是 \(1, 2, 4, 8, 16, \ldots , 2^n\) :
1 ]=> (load "53.scm")
;Loading "53.scm"...
; Loading "p228-add-streams.scm"... done
;... done
;Value: s
1 ]=> (stream-head s 10)
;Value 11: (1 2 4 8 16 32 64 128 256 512)
测试代码中用到的 stream-head 可以取出流的前 k
个元素。
以图示的办法应该能更清晰地观察到 s
的发展形式。
以下是 s
的展开的第一步:
1
/ \
s + s
展开第二步:
1
/ \
1 + 1
/ \ / \
s + s s + s
展开第三步:
1
/ \
/ \
/ \
/ \
/ \
1 + 1
/ \ / \
/ \ / \
1 + 1 + 1 + 1
/ \ / \ / \ / \
s + s s + s s + s s + s
展开第四步:
1
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
1 + 1
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
1 + 1 1 + 1
/ \ / \ / \ / \
/ \ / \ / \ / \
1 + 1 1 + 1 1 + 1 1 + 1
/ \ / \ / \ / \ / \ / \ / \ / \
s + s s + s s + s s + s s + s s + s s + s s + s