3 (require (planet soegaard/sicp:2:1/sicp))
6 (define (count-leaves x)
10 [else (+ (count-leaves (first x))
11 (count-leaves (rest x)))]))
14 (define (scale-tree tree factor)
15 (cond [(null? tree) '()]
16 [(not (pair? tree)) (* tree factor)]
17 [else (cons (scale-tree (first tree) factor)
18 (scale-tree (rest tree) factor))]))
20 (define (scale-tree-map tree factor)
24 (scale-tree-map x factor)))
27 (define (square-of-four tl tr bl br)
29 (let ((top (beside (tl painter) (tr painter)))
30 (bottom (beside (bl painter) (br painter))))
33 (define (flipped-pairs painter)
34 (let ((combine4 (square-of-four identity flip-vert
38 (define (identity x) x)
40 (define (corner-split painter n)
43 (let ((up (up-split painter (- n 1)))
44 (right (right-split painter (- n 1))))
45 (let ((top-left (beside up up))
46 (bottom-right (below right right))
47 (corner (corner-split painter (- n 1))))
48 (beside (below painter top-left)
49 (below bottom-right corner))))))
51 (define (right-split painter n)
54 (let ((smaller (right-split painter (- n 1))))
55 (beside painter (below smaller smaller)))))
57 (define (up-split painter n)
60 (let ((smaller (up-split painter (- n 1))))
61 (below painter (beside smaller smaller)))))
63 (define (square-limit painter n)
64 (let ((combine4 (square-of-four flip-horiz identity
65 rotate180 flip-vert)))
66 (combine4 (corner-split painter n))))