练习 3.56

按照练习的提示,将 s 的定义补充完整:

;;; 56-s.scm

(load "p229-scale-stream.scm")
(load "56-merge.scm")

(define s (cons-stream 1 
                       (merge (scale-stream s 2)
                              (merge (scale-stream s 3)
                                     (scale-stream s 5)))))

测试:

1 ]=> (load "56-s.scm")

;Loading "56-s.scm"...
;  Loading "p229-scale-stream.scm"... done
;  Loading "56-merge.scm"... done
;... done
;Value: s

1 ]=> (stream-head s 10)

;Value 13: (1 2 3 4 5 6 8 9 10 12)

1 ]=> (stream-head s 100)

;Value 14: (1 2 3 4 5 6 8 9 10 12 15 16 18 20 24 25 27 30 32 36 40 45 48 50 54 60 64 72 75 80 81 90 96 100 108 120 125 128 135 144 150 160 162 180 192 200 216 225 240 243 250 256 270 288 300 320 324 360 375 384 400 405 432 450 480 486 500 512 540 576 600 625 640 648 675 720 729 750 768 800 810 864 900 960 972 1000 1024 1080 1125 1152 1200 1215 1250 1280 1296 1350 1440 1458 1500 1536)

以上的数都能够被 23 或者 5 整除。

另外值得一提的是, merge 过程和我们在书本 105 页看过的 intersection-set 过程共享着一个非常相似的模型,最大的区别就是两个过程一个使用列表,另一个使用流。

讨论

blog comments powered by Disqus