SICP §2.3.4(Haffman 符号化木 その3 [Haffman 木の表現])

次はそのHuffman木の表現だ。Haffman木は2種類のオブジェクトで構成されている。

「記号」と「重み」を持つ、枝の終端に相当するオブジェクト
「葉」または「枝」がぶら下がるようにして構成されるオブジェクト。

自分にぶら下がっている「記号」の集合と「重み」も持っている。
こいつらを実装すると次のようになる。

;==============================
;葉
;==============================
;構成子
(define (make-leaf symbol weight)
  (list 'leaf symbol weight))

;述語
(define (leaf? object)
  (eq? (car object) 'leaf))

;選択子(シンボルを取得)
(define (symbol-leaf object)
  (cadr object))

;選択子(重みを取得)
(define (weight-leaf object)
  (caddr object))

;==============================
;枝
;==============================
;構成子
(define (make-code-tree left right)
  (list left
	right
	(append (symbols left) (symbols right))
	(+ (weight left) (weight right))))

;選択子(左枝)
(define (left-branch tree)
  (car tree))

;選択子(右枝)
(define (right-branch tree)
  (cadr tree))

;選択子(記号、またはその集合を取得)
(define (symbols tree)
  (if (leaf? tree)
      (list (symbol-leaf tree))
      (caddr tree)))

;選択子(記号、またはその集合の重みを取得)
(define (weight tree)
  (if (leaf? tree)
      (weight-leaf tree)
      (cadddr tree)))

なんもひねってないから、別に難しくはないわな。
てか、この程度の薄い内容のエントリでいいんだろうか。。(まいっか。)