根据定义, 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