問題2.77
(magnitude z)
ここで
z -> '(complex rectangular 3 4)
apply-genericでcomplex型のmagnitude関数が呼び出される。
その関数はグローバルのmagnitude関数である。
よってグローバルのmagnitude関数にcomplex型の型情報を剥ぎ取った中身がもう一度渡される。
つまり、(magnitude (contents z))
ここで (contents z) -> '(rectangular 3 4)
なので、apply-genericはrectangular型のmagnitude関数を呼び出す。
それは、install-rectangularで定義された内部関数なので、計算が行われる。
apply-genericは2回呼び出される。
一度目はグローバルのmagnitude関数
二度目はinstall-rectangularで定義された内部関数のmagnitude関数
リスト構造をうまく使っている。