(define(scale x factor)(cond((number? x)(* x factor))((line? x)(line-scale x factor))((shape? x)(shape-scale x factor))(else(error "unknown type")))))(define(translate x delta)(cond((number? x)(+ x delta))((line? x)(line-translate x delta))((shape? x)(shape-translate x delta))(else(error "unknown type")))))
上面的代码接收外部传入的 msg,利用 msg 来判断下一步所做的操作,这种编程风格被称为消息传递 (message passing)。消息传递编程将系统看成是多种对象以及它们之间的交流,解决问题的过程就是对象之间合理交流的结果。值得一提的是,在此之前,我们利用 Tagged Data 中的 tag 来区分不同的数据结构;现在,我们将 tag 转化成内部过程的一部分。
环境模型如下所示:

数据内部的状态始终保持在 E1 中,foo 接收到外界的消息后,对 E1 中的 x, y 进行操作,完成 car 的操作。
再看 mutation 操作
环境模型如下图所示,看的时候要参考环境模型中执行 procedure 的四个步骤
