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

问题描述 投票:1回答:1

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

是否也可以将前两个条件写为一个?也欢迎任何有关效率的评论。

scheme sicp
1个回答
1
投票

对于初学者,我们可以使用帮助程序仅实现一次sum

(define (sum x y)
  (+ (* x x) (* y y)))

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

(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))))
© www.soinside.com 2019 - 2024. All rights reserved.