Scheme 我的SICP练习1.3的实施方向是否正确?
SICP中的练习1.3要求定义一个以3个数字作为参数并返回2个最大数字的平方和的过程。我想我是对的,但我不确定我是否涵盖了所有的案例。我的执行情况如下:Scheme 我的SICP练习1.3的实施方向是否正确?,scheme,sicp,Scheme,Sicp,SICP中的练习1.3要求定义一个以3个数字作为参数并返回2个最大数字的平方和的过程。我想我是对的,但我不确定我是否涵盖了所有的案例。我的执行情况如下: (define (bigsq a b c) (cond ((and (> a b) (> b c)) (+ (* a a) (* b b))) ((and (> a b) (not (> b c))) (+ (* a a) (* c c))) ((> c a) (+
(define (bigsq a b c)
(cond ((and (> a b) (> b c)) (+ (* a a) (* b b)))
((and (> a b) (not (> b c))) (+ (* a a) (* c c)))
((> c a) (+ (* b b) (* c c)))
(else (+ (* a a) (* b b))))
有没有办法把前两个条件也写成一个条件?此外,还欢迎对效率提出任何意见。对于初学者,我们可以使用一个帮助程序来实现一次
sum
:
(define (sum x y)
(+ (* x x) (* y y)))
现在,对于条件:给定顺序不重要-<代码>(和A b)< /> >与<代码>(和b a)< /> >相同,只有4种情况需要考虑,如果< <代码> >:
,我们可以避免通过嵌套<代码>重复一些比较。(define (sum-max a b c)
(if (>= a b)
(if (>= b c)
(sum a b)
(sum a c))
(if (>= a c)
(sum b a)
(sum b c))))
@伦佐:问题是代码是否正确。关于风格的部分是旁白。
(不是(>bc))
是(您应该能够为所有可能的情况生成测试用例,它们并不多。有6个3个不同数字的排列,1个3个相同数字的排列。当其中2个相等时,有3个第三个最高的排列,3个第三个最低的排列。因此,总共有13个测试用例。这本书没有直到这一点看起来像我个人,我只同意使用书中提到的特征,但是在这种精神下,你应该考虑使用本节前面介绍的和平方程序。(FWW)使用“如果”而不是“COND”的效率可能更高。