SICP 問題2.75(メッセージパッシングの概念でmake-from-mag-angを実装)
問題
構成子make-from-mag-angをメッセージパッシングの流儀で実装せよ。この手続きは上のmake-from-real-imagに似ているはずだ。
解答
似た感じで作りゃいいわけだ。
(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 "Unknow op -- MAKE-FROM-MAG-ANG" op)))) dispatch)
こんな感じ。じゃ実験。
少数の確認メンドクセ。まぁ大体合ってそう。complex4とか。
gosh> (define pi 3.141592)
pi
gosh> pi
3.141592
gosh> (define complex3 (make-from-mag-ang 1 (/ pi 4)))
complex3
gosh> (complex3 'real-part)
0.7071068967259818
gosh> (complex3 'imag-part)
0.7071066656470943
gosh> (complex3 'magnitude)
1
gosh> (complex3 'angle)
0.785398
gosh> (define complex4 (make-from-mag-ang 1 (/ pi 3)))
complex4
gosh> (complex4 'real-part)
0.5000001886751096
gosh> (complex4 'imag-part)
0.8660252948527859
gosh> (complex4 'magnitude)
1
gosh> (complex4 'angle)
1.0471973333333333
gosh>