Chapter 2
2.1 Exercise 2.1
2.2 Exercise 2.2
2.3 Exercise 2.3
2.4 Exercise 2.4
2.5 Exercise 2.5
2.6 Exercise 2.6
2.7 Exercise 2.7
2.8 Exercise 2.8
2.9 Exercise 2.9
2.10 Exercise 2.10
2.11 Exercise 2.11
2.12 Exercise 2.12
2.13 Exercise 2.13
2.14 Exercise 2.14
2.15 Exercise 2.15
2.16 Exercise 2.16
2.17 Exercise 2.17
2.18 Exercise 2.18
2.19 Exercise 2.19
2.20 Exercise 2.20
2.21 Exercise 2.21
2.22 Exercise 2.22
2.23 Exercise 2.23
2.24 Exercise 2.24
2.25 Exercise 2.25
2.26 Exercise 2.26
2.27 Exercise 2.27
2.28 Exercise 2.28
2.29 Exercise 2.29
2.30 Exercise 2.30
2.31 Exercise 2.31
2.32 Exercise 2.32
2.33 Exercise 2.33
2.34 Exercise 2.34
2.35 Exercise 2.35
2.36 Exercise 2.36
2.37 Exercise 2.37
2.38 Exercise 2.38
2.39 Exercise 2.39
2.40 Exercise 2.40
2.41 Exercise 2.41
2.42 Exercise 2.42
2.43 Exercise 2.43
2.44 Exercise 2.44
2.45 Exercise 2.45
2.46 Exercise 2.46
2.47 Exercise 2.47
2.48 Exercise 2.48
2.49 Exercise 2.49
2.50 Exercise 2.50
2.51 Exercise 2.51
2.52 Exercise 2.52
2.53 Exercise 2.53
2.54 Exercise 2.54
2.55 Exercise 2.55
2.56 Exercise 2.56
2.57 Exercise 2.57
2.58 Exercise 2.58
2.59 Exercise 2.59
2.60 Exercise 2.60
2.61 Exercise 2.61
2.62 Exercise 2.62
2.63 Exercise 2.63
2.64 Exercise 2.64
2.65 Exercise 2.65
2.66 Exercise 2.66
2.67 Exercise 2.67
2.68 Exercise 2.68
2.69 Exercise 2.69
2.70 Exercise 2.70
2.71 Exercise 2.71
2.72 Exercise 2.72
2.73 Exercise 2.73
2.74 Exercise 2.74
2.75 Exercise 2.75
2.76 Exercise 2.76
2.77 Exercise 2.77
2.78 Exercise 2.78
2.79 Exercise 2.79
2.80 Exercise 2.80
2.81 Exercise 2.81
2.82 Exercise 2.82
2.83 Exercise 2.83
2.84 Exercise 2.84
2.85 Exercise 2.85
2.86 Exercise 2.86
2.87 Exercise 2.87
2.88 Exercise 2.88
2.89 Exercise 2.89
2.90 Exercise 2.90
2.91 Exercise 2.91
2.92 Exercise 2.92
2.93 Exercise 2.93
2.94 Exercise 2.94
2.95 Exercise 2.95
2.96 Exercise 2.96
2.97 Exercise 2.97

2.29 Exercise 2.29

First of all, writing the selectors left-branch and right-branch is trivial, as well as branch-length and branch-structure:

(define left-branch car)
(define right-branch cadr)
(define branch-length car)
(define branch-structure cadr)

Finding the total weight of a branch is just a matter of summing the weights of the left and right branches recursively. We can do that using two procedures, total-weight and weigh-branch, both of which call each other:

(define (weigh-branch branch)
  (let ((s (branch-structure branch)))
    (if (not (list? s)) s
        (total-weight s))))
(define (total-weight mobile)
  (+ (weigh-branch (left-branch mobile)) (weigh-branch (right-branch mobile))))

To determine if a mobile is balanced, we can follow the definition of a balanced mobile and define a recursive procedure that tests whether two branches have equal torque (where torque is computed by an inner procedure) and, if so, recursively checks if the mobiles rooted at each branch are balanced:

(define (is-mobile-balanced? mobile)
  (define (torque branch)
    (* (branch-length branch) (weigh-branch branch)))
  (define (are-submobiles-balanced? branch)
    (let ((s (branch-structure branch)))
 
      (if (not (list? s)) #t
          (is-mobile-balanced? s))))
  (let ((left (left-branch mobile))
        (right (right-branch mobile)))
    (if (not (= (torque left) (torque right))) #f
        (and
         (are-submobiles-balanced? left)
         (are-submobiles-balanced? right)))))

Supposing that we changed the representation of mobiles to use cons cells instead of lists, we would only need to change the selectors right-branch and branch-structure to use cdr instead of cadr, and also change the list? checks to pair? checks. (We could also use pair? checks in this implementation, since lists are pairs, but I believe it is better to use the more restrictive selector).