問題2.69

(define (generate-huffman-tree pairs)
  (successive-merge (make-leaf-set pairs)))

(define (successive-merge leaf-set)
  (if (> (length leaf-set) 1)
      (successive-merge (adjoin-set (make-code-tree (car leaf-set) (cadr leaf-set)) (cddr leaf-set)))
      (car leaf-set)))

(let ((tree (generate-huffman-tree '((a 4) (b 2) (c 1) (d 1)))))
  (decode '(0 1 1 0 0 1 0 1 0 1 1 1 0) tree))

;; -> '(A D A B B C A)
;; -> ok