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