图 39.1 管理多个交通信号灯
下一步,我们要考虑这个函数应该做些什么,以什么为输入,返回什么,如果有效果的话,为何。先
考虑它的名字。我们把这个新的函数称为 make-traffic-light;毕竟,这个抽象程序的用途是建立一个模拟的
交通信号灯。另外,按照抽象诀窍,抽象函数的输入是个实例特定的值。交通信号灯的特定值就是它在画
布上的位置;为了明确,我们再加上它的实际地址。
每一次使用 make-traffic-light都应该建立一个新的交通信号灯,并且提供切换这个信号灯状态的操作。
前一部分表示了它的效果,具体说来,这个函数应当初始化状态变量,并在画布上的指定位置绘制出交通
信号灯的初始状态;后一部分则描述了它的返回值:一个切换交通信号灯状态的函数。
图 39.1给出了交通灯模拟器的框架,包括了 make-traffic-light的完整定义。这个模拟器由模型与视图
组成。视图被称作 draw-light,这里只给出它的框架;视图的完整定义作为练习题。
make-traffic-light的定义是一个普通函数的定义,它使用一个 local定义来设置状态变量、初始化函数
和改变状态的函数。local表达式的主体使用这个初始化函数,然后返回 next。
使用 make-traffic-light,我们可以建立多个独立的交通信号灯,或者建立交通信号灯的集合,也可以
1