SICPゼミ第13回

今日も人生がつらい。
Gauche ユーザリファレンス: 7.4 ジェネリックファンクションとメソッド

練習問題2.75
(define (make-from-mag-ang r theta)
  (define (dispatch op)
    (cond ((eq? op 'real-part) (* r (cos theta)))
          ((eq? op 'imag-part) (* r (sin theta)))
          ((eq? op 'magnitude) r)
          ((eq? op 'angle) theta)
          (else (error "Unknown op: MAKE-FROM-REAL-IMAG" op))))
  dispatch)

by tube

練習問題2.76

演算が追加されやすい→data-directed
型が追加されやすい→message-passing

練習問題2.77

f:id:sicp-zemi:20160602162833j:plain

練習問題2.78

タグを取得する関数を

  1. number?とかしてtrueならnumberタグを返す
  2. 全部falseだったらcarする

と帰ればいい。

練習2.79

タグを判定してから各形式ごとに等価か判定すればいい。有理数なら分子分母、複素数なら実部、虚部を取得すればできる。

練習2.80

2.79と同じ。有理数はnumerator = 0, 複素数はmagnitude = 0