我对 SICP 练习 1.3 的实施是否朝着正确的方向发展?

Is my implementation of SICP Exercise 1.3 going in the right direction?

SICP 中的练习 1.3 要求定义一个过程,该过程将 3 个数字作为参数,returns 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)))

现在,对于条件:假设顺序无关紧要 - (sum a b)(sum b a) 相同,只有 4 种情况需要考虑,我们可以避免重复一些通过嵌套比较 ifs:

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