Exercise 2.68

Read Exercise 2.68 ~ Solution


(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

Leave a comment