【发布时间】:2020-08-09 15:05:39
【问题描述】:
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))))
有没有办法将前两个条件也写成一个?也欢迎任何关于效率的 cmets。
【问题讨论】:
-
@Renzo 问题是代码是否正确。关于风格的部分是旁白。
-
(not (> b c))是(<= b c) -
您应该能够为所有可能性生成测试用例,它们的数量并不多。 3个不同数字的6个排列,3个相同数字的1个排列。当其中 2 个相等时,有 3 个排列,其中第三个最高,3 个排列第三个最低。所以总共要测试 13 个案例。
-
直到那时为止,这本书看起来好像
-
就我个人而言,我同意仅使用本书中介绍的特性,但本着这种精神,您应该考虑使用本节前面介绍的平方和过程。 (fwiw 使用 'if' 而不是 'cond' stackoverflow.com/a/610719/53252 可能效率更高)