SICP 读书笔记 - 模块化、对象和状态

两种认识看待系统结构世界观:对象观,信息流观。前一种对象观很好理解,即将系统结构中按角色及功能进行对象分割,然后将对象组织起来即完成一个系统;但对信息流观不是特别清晰。

代换模型是纯粹为函数式设计而准备的模型,但计算机要模拟世界就不可避免地要解决中间状态保留的问题,如银行账号中余额。SCHEME采用环境模型很好地解决了中间状态问题,同时也兼容了代换模型,但如此一来,SCHEMEM就从本质上打破了函数式编程范式中的“引用透明性”原则。环境模型也可以理解为上下文模型,就是一个变量的有无与值域为何,取决与运行时上下文结构体中维护的变量列表。

虽然用过程来表示数据的方式在抽象的过程中就有学习到,但其威力还是在实现双端队列的过程中见识到了。即结合环境模型中的中间状态变量(存储头与尾指针),用过程来表征双端队列,即双端队列为一个过程。与用过程表征序对一样,过程根本上是一个根据字符串做方法分发过程,在返回队列时再次返回分发过程,从而保持对队列解释的一致性。这样就解决了,由于双端队列中存在环而无法让解释器返回队列数据结构本身的问题。

环境模型可以使用有状态的过程,书中用来两种实例来验证该模型的具体使用方法:电路模拟与约束系统。

电路模拟,将时间序列中的因果事件关系展开到一个列表中,然后扫描该列表中的关系过程,完成模拟结果的计算。其关键在于将线路抽象为一种有状态实体,完成变化的传递;而各个逻辑部件接收到变化计算出值后,再将新值作为一种变化交给下一个线路。

约束系统,完全打破了以前对计算的理解,以前潜意识地以为程序都是一种单向计算,即通过一个方向的固定输入,获得其输出,但反过来,可能就需要重新构建计算程序。而约束系统正如其名字,其各个输入保持一种约束关系,如书中的9C = 5(F - 32),C与F形成一种约束。

电路模拟是一种对时间上的前后因果关系(由电子器件的单向性决定)的映射,而约束系统则对一种全向的因果关系(因果定位不确定)的映射。两者的核心,都是通过带状态的结点完成状态更改的传递,计算部件将状态更改计算完成后,再将其传递给下一个其连接的状态结点,依次展开。

发表评论