関数型言語の勉強にSICPを読もう - (27) 2章 - データによる抽象の構築 (109-110ページ)

問題2.75

データが手続きでも、もう驚かなくなってきた。
これはSICP読む前にはなかった感覚だ。

(define (make-from-ma-g-ang mag angle)
  (define (dispatch op)
    (cond ((eq? op 'real-part) (* mag (cos a)))
          ((eq? op 'imag-part) (* mag (sin a)))
          ((eq? op 'maginitude) mag)
          ((eq? op 'angle) angle)
          (else (error "hoge")))))

問題2.76

新しい型 新しい演算
汎用演算 すべての手続きを変更 そのまま
データ主導 その型を追加するだけ そのまま
メッセージ そのまま すべての型を変更

新しい型が絶えず追加される→メッセージ
新しい演算が絶えず追加される→データ主導

強制型変換

型変換って何気なく使っていたけどこういうものなのね。
やっぱり先人の考えていたことを全然知らずにそのしくみだけを使うのは良くないということに気づく。


あとそろそろ練習問題を間引くときかどうかかなり悩む。

追記

2.5.2 汎用算術演算

各階層でのタグはがしの話が ネットワークプロトコルスタックでの各ヘッダを参照してパケットの奥に潜っていく様子に似ていると思った。

問題2.77

magintudeは real-part, image-partに依存しているので2つが必要。
real-part, image-partはangleに依存ってことかな?。
apply-genericは3回呼ばれる。

問題2.78

(define (attach-tag type-tag contents)
  (if (eq type-tag 'number)
      contents
      (cons type-tag contens)))

(define (type-tag datum)
  (cond ((number? datum) 'number)
        ((pair? datum) (car datum))
        (else (error "Bad Tagged"))))

(define (contens datum)
  (cond ((number? datum) datum)
        ((pair? datum) (cdr datum))
        (else (error "Bad Tagged"))))

'numberというシンボルは使って良いんだよね?

問題2.79-2.97

ばっさりと略します。
3章に惹かれたので・・・。
※「SICPを読もう」の目次はこちら


計算機プログラムの構造と解釈
Gerald Jay Sussman Julie Sussman Harold Abelson 和田 英一
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404