next up previous
Next: 4.5.3 場合分けを明示する汎用手続き Up: 4.5 データのタイプ付け Previous: 4.5.1 タイプつけ

4.5.2 極座標と直交座標の例

例として2次元の座標データを極座標(polar)と直交座標(rectangular)で表現 した場合の例をしめします. それぞれのデータを作るための手続きと どちらのタイプであるかを判定する手続きは 以下のようになります.

(define (make-rectangular x y)
  (attach-type 'rectangular (cons x y)))

(define (make-polar x y)
  (attach-type 'polar (cons x y)))

(define (rectangular? z)
  (eq? (type z) 'rectangular))
(define (polar? z)
  (eq? (type z) 'polar))
実部,虚部,絶対値,偏角を求める手続きをそれぞれの データタイプに対して用意すると,

(define (square x) (* x x))
(define (real-part-rectangular z) (car z))
(define (imag-part-rectangular z) (cdr z))
(define (magnitude-rectangular z)
  (sqrt (+ (square (car z)) (square (cdr z)))))
(define (angle-rectangular z)
  (atan (cdr z) (car z)))

(define (real-part-polar z)
  (* (car z) (cons (cdr z))))
(define (imag-part-polar z)
  (* (car z) (sin (cdr z))))
(define (magnitude-polar z) (car z))
(define (angle-polar z) (cdr z))
となります.

generated through LaTeX2HTML. M.Inaba 平成18年5月6日