SICPを読む(82) 2.4 抽象データの多重表現
抽象データの多重表現に入ります。しばらく淡々と説明が続く。
テーマが「複素数」というのが泣ける。相当苦しい章になりそうだ。
複素数の表現
- ずっと前にやった有理数(分数)表現と同じような感じ。
- しかし、今回は事情が違う。直行座標形式と、極座標形式という、複素数表現の実装方法を2種類持ってる事。
- 激しく困る問題は、どちらのデータ型も複素数を表現していて、複素数パッケージを2種類使いたいという悩みだ。
Cで表すと、こんな状態。
struct complex { double real; double imag; }; struct complex { double magnitude; double angle; };
えぇぇぇ・・・ダメじゃん。
この問題をどう解決していくんだろうというのが今回のテーマらしい。
楽しみ半分。複素数嫌だな。ってのが半分。
とりあえず複素平面の勉強から・・・。
Gaucheのmath.constの真似
MzSchemeだと、math.ssにpiが定義してあるけど、piだけじゃ面白くないので、Gaucheのmath.constの真似をして色々追加してみた。
(define pi (atan 0.0 -1.0)) ; 3.141592653589793 (define (*pi x) (* x pi)) (define pi/6 (*pi 1/6)) ; 0.5235987755982988 (define pi/4 (*pi 1/4)) ; 0.7853981633974483 (define pi/3 (*pi 1/3)) ; 1.0471975511965976 (define pi/2 (*pi 1/2)) ; 1.5707963267948966 (define pi2/3 (*pi 2/3)) ; 2.0943951023931953 (define pi3/4 (*pi 3/4)) ; 2.356194490192345 (define pi5/6 (*pi 5/6)) ; 2.617993877991494 (define (/pi x) (/ x pi)) (/pi pi/2) ; 0.5 (/pi pi/4) ; 0.25
半分書いた所で疲れた。とりあえず半分あればいいや。