Hatena::Groupsicp

EhrenのSICP学習場

 | 

2010-01-05

2.4

01:10

SICP Lite #9 の宿題をやっておく

問題2.75

(define (make-from-real-imag x y)
  (define square (lambda (x) (* x x)))
  (define (dispatch op)
    (cond ((eq? op 'real-part) x)
          ((eq? op 'imag-part) y)
          ((eq? op 'magnitude)
           (sqrt (+ (square x) (square y))))
          ((eq? op 'angle) (atan y x))
          (else
           (error "Unknown op " op))))
  dispatch)

関数を返す関数を定義して、返した関数に対して引数で動きが変わるのをメッセージパッシングと呼ぶらしい。確かにメッセージを送っているようにも見える。


 問題2.76

名前新しい型追加新しい演算追加
明白な振り分けを持つ汎用演算全汎用選択子を変更演算追加のみ
データ主導流型追加のみ各型に対してインターフェース、内部手続きの追加
メッセージパッシング型追加のみ各型に対して演算追加が必要

新しい型、演算が追加された場合には、データ主導orメッセージパッシングならばOK

うーんでもこれあってるのかな。自信がありませぬ。

AliAli2012/10/06 07:20Free knowledge like this doesn't just help, it promote dmeorcacy. Thank you.

hrmmokhrmmok2012/10/06 23:52bunbti <a href="http://akzivlylybvv.com/">akzivlylybvv</a>

ameyuamuameyuamu2012/10/09 03:562v9QV7 , [url=http://nifemaxjsusp.com/]nifemaxjsusp[/url], [link=http://cyyzavyreqqm.com/]cyyzavyreqqm[/link], http://evfvibpktgng.com/

 |