SICPを読む(83) 2.4.2 タグつきデータ

まだまだ、解説が続く。

タグつきデータ

複素数表現を「型タグ」で表現しようというお話し。

前回のが、

struct complex-rectangular {
    int type;
    double real;
    double imag;
};

struct complex-poler {
    int type;
    double magnitude;
    double angle;
};

となった。まぁまぁ無難な解決法。

僕のScheme実装もこんな感じデス。

もうちょっと抽象化

どうも同じような表現が続いているので、

(define (switcher x rectangler polar)
  ((cond ((rectanglar? x) rectangler)
        ((polar? x) polar)
        (else
          (error "undefind type" x)))
   (contents x)))

(define (real-part x) (switcher x real-part-rectangular real-part-polar))
(define (imag-part x) (switcher x imag-part-rectangular imag-part-polar))
(define (magnitude x) (switcher x magnitude-rectangular magnitude-polar))
(define (angle x)     (switcher x angle-rectangular angle-polar))

こんな感じにしてみた。

設定書くだけでどんどん増やせる。