Blame


1 665c255d 2023-08-04 jrmu (define (make-leaf symbol weight)
2 665c255d 2023-08-04 jrmu (list 'leaf symbol weight))
3 665c255d 2023-08-04 jrmu (define (leaf? object)
4 665c255d 2023-08-04 jrmu (eq? (car object) 'leaf))
5 665c255d 2023-08-04 jrmu (define (symbol-leaf x) (cadr x))
6 665c255d 2023-08-04 jrmu (define (weight-leaf x) (caddr x))
7 665c255d 2023-08-04 jrmu
8 665c255d 2023-08-04 jrmu (define (make-code-tree left right)
9 665c255d 2023-08-04 jrmu (list left
10 665c255d 2023-08-04 jrmu right
11 665c255d 2023-08-04 jrmu (append (symbols left) (symbols right))
12 665c255d 2023-08-04 jrmu (+ (weight left) (weight right))))
13 665c255d 2023-08-04 jrmu
14 665c255d 2023-08-04 jrmu (define (left-branch tree) (car tree))
15 665c255d 2023-08-04 jrmu (define (right-branch tree) (cadr tree))
16 665c255d 2023-08-04 jrmu (define (symbols tree)
17 665c255d 2023-08-04 jrmu (if (leaf? tree)
18 665c255d 2023-08-04 jrmu (list (symbol-leaf tree))
19 665c255d 2023-08-04 jrmu (caddr tree)))
20 665c255d 2023-08-04 jrmu (define (weight tree)
21 665c255d 2023-08-04 jrmu (if (leaf? tree)
22 665c255d 2023-08-04 jrmu (weight-leaf tree)
23 665c255d 2023-08-04 jrmu (cadddr tree)))
24 665c255d 2023-08-04 jrmu
25 665c255d 2023-08-04 jrmu (define (decode bits tree)
26 665c255d 2023-08-04 jrmu (define (decode-1 bits branch)
27 665c255d 2023-08-04 jrmu (cond ((if (and (null? bits)
28 665c255d 2023-08-04 jrmu (leaf? branch))
29 665c255d 2023-08-04 jrmu (list (symbol-leaf branch))
30 665c255d 2023-08-04 jrmu ;; ((null? branch)
31 665c255d 2023-08-04 jrmu ;; ("error: symbol not found"))
32 665c255d 2023-08-04 jrmu ((leaf? branch)
33 665c255d 2023-08-04 jrmu (cons (symbol-leaf branch)
34 665c255d 2023-08-04 jrmu (decode-1 (cdr bits)
35 665c255d 2023-08-04 jrmu (choose-branch (car bits) tree))))
36 665c255d 2023-08-04 jrmu (else (decode-1 (cdr bits)
37 665c255d 2023-08-04 jrmu (choose-branch (car bits) branch)))))
38 665c255d 2023-08-04 jrmu (decode-1 bits tree))
39 665c255d 2023-08-04 jrmu
40 665c255d 2023-08-04 jrmu
41 665c255d 2023-08-04 jrmu
42 665c255d 2023-08-04 jrmu
43 665c255d 2023-08-04 jrmu
44 665c255d 2023-08-04 jrmu
45 665c255d 2023-08-04 jrmu
46 665c255d 2023-08-04 jrmu
47 665c255d 2023-08-04 jrmu
48 665c255d 2023-08-04 jrmu
49 665c255d 2023-08-04 jrmu
50 665c255d 2023-08-04 jrmu
51 665c255d 2023-08-04 jrmu
52 665c255d 2023-08-04 jrmu
53 665c255d 2023-08-04 jrmu
54 665c255d 2023-08-04 jrmu
55 665c255d 2023-08-04 jrmu
56 665c255d 2023-08-04 jrmu
57 665c255d 2023-08-04 jrmu
58 665c255d 2023-08-04 jrmu
59 665c255d 2023-08-04 jrmu
60 665c255d 2023-08-04 jrmu
61 665c255d 2023-08-04 jrmu
62 665c255d 2023-08-04 jrmu
63 665c255d 2023-08-04 jrmu
64 665c255d 2023-08-04 jrmu
65 665c255d 2023-08-04 jrmu
66 665c255d 2023-08-04 jrmu
67 665c255d 2023-08-04 jrmu
68 665c255d 2023-08-04 jrmu
69 665c255d 2023-08-04 jrmu
70 665c255d 2023-08-04 jrmu
71 665c255d 2023-08-04 jrmu
72 665c255d 2023-08-04 jrmu
73 665c255d 2023-08-04 jrmu
74 665c255d 2023-08-04 jrmu
75 665c255d 2023-08-04 jrmu
76 665c255d 2023-08-04 jrmu
77 665c255d 2023-08-04 jrmu
78 665c255d 2023-08-04 jrmu
79 665c255d 2023-08-04 jrmu
80 665c255d 2023-08-04 jrmu
81 665c255d 2023-08-04 jrmu
82 665c255d 2023-08-04 jrmu
83 665c255d 2023-08-04 jrmu
84 665c255d 2023-08-04 jrmu
85 665c255d 2023-08-04 jrmu
86 665c255d 2023-08-04 jrmu
87 665c255d 2023-08-04 jrmu (define (decode bits tree)
88 665c255d 2023-08-04 jrmu (define (decode-1 bits current-branch)
89 665c255d 2023-08-04 jrmu (if (null? bits)
90 665c255d 2023-08-04 jrmu '()
91 665c255d 2023-08-04 jrmu (let ((next-branch
92 665c255d 2023-08-04 jrmu (choose-branch (car bits) current-branch)))
93 665c255d 2023-08-04 jrmu (if (leaf? next-branch)
94 665c255d 2023-08-04 jrmu (cons (symbol-leaf next-branch)
95 665c255d 2023-08-04 jrmu (decode-1 (cdr bits) tree))
96 665c255d 2023-08-04 jrmu (decode-1 (cdr bits) next-branch)))))
97 665c255d 2023-08-04 jrmu (decode-1 bits tree))
98 665c255d 2023-08-04 jrmu (define (choose-branch bit branch)
99 665c255d 2023-08-04 jrmu (cond ((= bit 0) (left-branch branch))
100 665c255d 2023-08-04 jrmu ((= bit 1) (right-branch branch))
101 665c255d 2023-08-04 jrmu (else (error "bad bit -- CHOOSE-BRANCH" bit))))