【发布时间】:2013-05-30 17:00:07
【问题描述】:
当我输入子问题 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 Scheme) 报告错误:“作为第一个参数传递给 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
我很困惑。任何人都可以试用这个问题并帮助我吗?
【问题讨论】:
-
两个版本是等价的。
-
@Will 除了在使用
let的版本中,m在测试前使用。 -
@TerjeD。我现在就去吃我不起眼的馅饼。 :)
-
不要忘记接受回答您问题的答案。 :) 单击旁边的大绿色空 V 形标志轮廓。 (你会因此获得 +2 代表)。
-
@WillNess 谢谢提醒!我已经接受了 Terje 的回答。此外,我是新来的,非常感谢看到这么多热心的朋友! :-)
标签: lisp scheme sicp mit-scheme