我正在关注计算机程序的结构和解释,在尝试解决 Ex 1.3 时,我第一次尝试得到以下代码:
(define (sumsq a b c)(
(define highest (if (> (if (> a b) a b) (if (> a c) a c)) (if (> a b) a b) (if (> a c) a c)))
(define second_h (if (> (if (> a b) b a) (if (> a c) c a)) (if (> a b) b a) (if (> a c) c a)))
(+ (* highest highest) (* second_h second_h)))
它不起作用,我查找了解决方案并在SICP Wiki上找到了它们
;; ex 1.3
;; implemented using only techniques covered to this point
(define (square x) (* x x))
(define (sum-of-squares x y)
(+ (square x) (square y)))
(define (largest-two-of-three x y z)
(if (>= x y)
(sum-of-squares x (if (>= y z) y z))
(sum-of-squares y (if (>= x z) x z))))
不同之处在于我使用多个语句来定义变量,然后对平方求和,而正确的方法是将我的每一行定义为函数。
方案一中的函数是线性的吗?还是我错过了整件事?