(define (encode-symbol sym tree) (define (has-symbol? sym branch) (member sym (symbols branch))) (if (leaf? tree) nil (let ((left (left-code-branch tree)) (right (right-code-branch tree))) (cond ((has-symbol? sym left) (cons 0 (encode-symbol sym left))) ((has-symbol? sym right) (cons 1 (encode-symbol sym right))) (else (error "symbol not in tree" sym)))))) (equal? (encode (decode sample-message sample-tree) sample-tree) sample-message) #t