SICP 全笔记

在进入下一章之前,需要稍微整理一下思路。

我们的复数系统要提供给用户下面几个操作:

1. 取出复数的某部分:real-part, imag-part, magnitude, angle 2. 对复数的操作:add-complex, sub-complex, mul-complex, div-complex

这个复数系统中允许用户用两种表示方法来定义一个复数,一种是极坐标,另一种是直角坐标。在这一节中,我们将两种表示复数的数据都打上标签–极坐标使用 polar 符号,直角坐标的使用 retangular

打上了标签之后,但凡需要取出某个复数的某一部分,比如 real-part,我们就去查看这个复数的类型,然后在 real-part 过程中,通过判断类型去调用相应类型的对应的过程。比如这个复数在构造的时候是使用极坐标表示,那么我们的 real-part 过程去调用 real-part-polar 过程,最后返回这个过程计算之后的结果。

其他过程如 imag-part 等也类似。

这样设计系统的缺点在于,在 real-partimag-partmagnitudeangle 几个过程中,每一个过程都必须对复数的类型进行判断,进而去调用相应类型的处理过程。如果我们添加了另外 N 种表示方法,那么:

  1. 可能过程名字之间会重复。
  2. 上面的四个过程中的 if 都必须添加相应的类型判断。