SICP--流

这一节中将基于一种称为 流 的数据结构,探索对状态进行模拟的另一条途径

流可能缓和状态模拟中的复杂性

从抽象的观点看,一个流也就是一个序列。然而,把流直接表示为表并不能完全揭示流处理的威力。作为一种替换形式,我们将要引用一种延时求值的技术,它将使我们能够用流去表示非常长的(甚至是无穷的)序列

流处理使我们可以模拟一些包含状态的系统,但却不需要利用赋值或者变动数据

流作为延时的表

SICP--流_第1张图片

SICP--流_第2张图片

SICP--流_第3张图片

为了使流的实现能自动地,透明的完成一个流的构造与使用的交错进行,我们需要做出一种安排,使得对于流的 cdr 的求值要等到真正通过过程 stream-cdr 去访问它的时候再做,而不是在通过 cons-stream 构造流的时候做

我们的流实现将基于一种称为 delay 的特殊形式,对于(delay < exp >)的求值将不对表达式< exp > 求值,而是返回一个称为 延时对象 的对象,它可以看作是对在未来的某个时间求值 < exp> 的允诺 ,和 delay 一起的还有一个称为 force 的过程,它以一个延时对象为参数,执行相应的求值工作,从效果上看,也就是迫使 delay 完成它所允诺的求值

cons-stream 是一个特殊形式,其定义将使

( cons-stream < a > < b > )

等价于

( cons < a > ( delay < b > ) )

SICP--流_第4张图片

流实现的行为方式

一般而言,可以将延时求值看作一种“由需要驱动”的程序设计,其中流处理的每个阶段都仅仅活动到足够满足下一阶段需要的程度

SICP--流_第5张图片

SICP--流_第6张图片

SICP--流_第7张图片

delay 和 force 的实现

SICP--流_第8张图片

SICP--流_第9张图片

无穷流

SICP--流_第10张图片

SICP--流_第11张图片

SICP--流_第12张图片

隐式地定义流

SICP--流_第13张图片

SICP--流_第14张图片

流计算模式的使用

系统地将迭代操作方式表示为流过程

SICP--流_第15张图片

将流作为信号

我们可以采用流,以一种非常直接的方式为信号处理系统建模,用流的元素表示一个信号在顺序的一系列时间间隔上的值

SICP--流_第16张图片

流和延时求值

SICP--流_第17张图片

SICP--流_第18张图片

你可能感兴趣的:(SICP,sicp)