Scheme 我的SICP练习1.3的实施方向是否正确?

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) (+

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) (+ (* 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”的效率可能更高。