SICP 問題2.67(語頭符号の復号化処理)
お〜っし、久々の問題ゾーンです。
問題
符号化木と例題の通信文を定義する。
(define sample-tree (make-code-tree (make-leaf 'A 4) (make-code-tree (make-leaf 'B 2) (make-code-tree (make-leaf 'D 1) (make-leaf 'C 1))))) (define sample-message '(0 1 1 0 0 1 0 1 0 1 1 1 0))
通信文を復号化するのに decode 手続きを使い、結果を示せ。
解答
符号化木の作り方がなんかイマイチ。こーゆー作り方したくねぇんだがな。。
ま、そのうちこの符号化木の作り方自体が問題として出てくるかもしれんし、ここではこのまま使用させてもらいましょ。
decode 手続はSICP §2.3.4(Haffman 符号化木 その4 [復号化手続き])で定義してあるのでそちらを参照のこと。
では実験。
ちなみに自分で定義した decode 手続きもちゃんと動作した。うれしい。
gosh> (decode sample-message sample-tree)
(A D A B B C A)
gosh>