SICP問題2.75
メッセージパッシング(message passing) (教科書で定義)
(define (make-from-real-imag x y) (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 -- MAKE-FROM-REAL-IMAG" op)))) dispatch) (define (apply-generic op arg) (arg op))
問題。構成子 make-from-mag-ang をメッセージパッシングの流儀で実装せよ。
(define (make-from-mag-ang r a) (define (dispatch op) (cond ((eq? op 'real-part) (* r (cos a))) ((eq? op 'imag-part) (* r (sin a))) ((eq? op 'magnitude) r) ((eq? op 'angle) a) (else (error "Unknown op -- MAKE-FROM-MAG-ANG" op)))) dispatch)
テスト
(define z (make-from-mag-ang 1.0 0.3)) ; z (z 'real-part) ; 0.955336489125606 (z 'imag-part) ; 0.29552020666133955 (z 'magnitude) ; 1.0 (z 'angle) ; 0.3