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)))
现在,对于条件:给定顺序无关紧要-(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))))