SICP3.5.4的改进以及评论
2017-04-14 本文已影响0人
Polarpole
原文


这里引入了延时参数的概念,我觉得纯粹是多余的,甚至破坏了美感。
原本的integral流积分函数已经很完备了,不需要为了这种“特殊情况”重写。
况且,输出的y,本身也是流,也就说明期本身具备延迟求值的特性。
而且,把输出流当作是流本身的“原料”,这种迭代的做法也是作者经常使用的。而且他还冠名为隐式定义流,这里不知道是疏忽还是为了用作例子,没有完全贯彻。
以下是改进的函数。
(define (solve f y0 dt)
(define y
(cons-stream y0
(stream-cdr (integral (stream-map f y) y0 dt))))
y)
过程都是参造流程图改进,cons-stream本身具备delay的特性,不需要重写integral函数。

结果与书本一致。
这里引发了一个思考,是否有必要额外引入这个延时参数的概念,是否必须写这样的“特殊函数”?
我自己的答案是否。delay的是我们创造cons-stream的元素,cons-stream在流里发挥着delay的效用,没必要在构建流时生硬地搬入“底层的”delay。