SICP 全笔记

到了 2.4.3 节,我们将 real-part,imag-part,magnitude,angle 中判断参数类型的部分给彻底去掉了,取而代之的,是先提取这个打了标签的数据中的标签,然后使用这个标签去查表得到对应的过程。

每个写自己模块的人都需要负责把数据结构与对应过程给写到表中(使用 put 来完成“A 结构->X 过程”的映射),之后需要的时候,直接对应表去查找 A 结构应该使用哪个过程。

而之前的系统(2.4.2章中提到的系统)没有整理数据结构与对应过程的映射,每个数据的处理是在 real-part 等过程中,通过写 if 判断来完成这个映射的。

实际的编程工作一点都没有减少。这两个设计都需要:

  1. 写构造函数来表示数据,比如 make-from-mag-ang
  2. 写处理这个结构的过程,比如 real-part
  3. 写对于这种数据的表示应该映射到哪一个过程上

真正的区别即在第 3 点上:

  1. 对于之前的系统,使用 cond 在 real-part 等过程中映射
  2. 对于现在的系统,使用指定的过程来映射,提高模块的能力

所以,data-directed programming 不如叫做 type-directed programming 算了。