我对 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 种情况需要考虑,我们可以避免重复一些通过嵌套比较 if
s:
(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))))
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 种情况需要考虑,我们可以避免重复一些通过嵌套比较 if
s:
(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))))