プログラミング Gauch - 17 章 練習問題

メソッド適用のカスタマイズについて。ここの動作がよくわからない。とりあえず動作を順に書き出してみよう。

  1. クラスが定義される。これが総称関数クラス。
  2. クラスへの総称関数適用方法が変更される。それを行うのが apply-generic。
  3. を継承した クラスが定義される。
  4. クラスへの総称関数適用方法が変更される。
  5. インスタンスとして sub という総称関数が定義される。
  6. 二つの数値を引数にとる sub が定義される。

この状態で (sub ([num1 ] [num2 ]) が実行されると

  1. に対して apply-generic した処理が呼ばれる
  2. その中の next-method で sub 内部の処理が呼ばれる??
  3. その後で に対して apply-generic した処理が呼ばれる?

という感じに見えます*1。next-method は優先順位が次のメソッドを呼ぶもののはずなので、sub 本体をこれで呼んでいるわけじゃないと思うのだけれど、処理の流れとしてはここに入ってるような気がする。sub の中では next-method 等をしているわけではないけれど、その後に上位クラスの総称関数適用処理が呼ばれているのもよくわからない。sub 本体が最後に呼ばれるならなんとなくわかるのだけれど。
そして練習問題。 の apply-generic に渡された引数を class-of してみると、きちんと #> が返ってくるので、これで場合分けすればいいような気がします。クラスを見て分岐する処理がよろしくないのは解ってますが。さて……どうやって比較すればいいんだろ。

*1:print デバッグで追ってみた感じだと