サブ問題 b に対する元の解決策を入力したとき。SICP の演習 2.29:
(define (total-weight m)
(let ((left (left-branch m))
(right (right-branch m)))
(cond ((null? m) 0)
((not (pair? m)) m)
(else
(+ (total-weight (branch-structure left))
(total-weight (branch-structure right)))))))
次のデータでテストしました。
(define left1 (make-branch 5 8))
(define right1 (make-branch 7 10))
(define m1 (make-mobile left1 right1))
(define right2 (make-branch 1 3))
(define m2 (make-mobile left2 right2))
(define left0 (make-branch 12 m1))
(define right0 (make-branch 5 m2))
(define m0 (make-mobile left0 right0))
(total-weight m0)
インタープリター (MIT/GNU スキーム) がエラーを報告しました:「cdr の最初の引数として渡されたオブジェクト 3 は正しいタイプではありません」。でも表情を消すと
(let ((left (left-branch m))
(right (right-branch m)))
...)
次のコードを使用します。
(define (total-weight m)
(cond ((null? m) 0)
((not (pair? m)) m)
(else
(+ (total-weight (branch-structure (left-branch m)))
(total-weight (branch-structure (right-branch m)))))))
プログラムは正常に動作し、結果を出力しました
;Value: 27
混乱しました。誰でもこの問題を試して助けてもらえますか?