在SICP开始锻炼时出错(练习1.3)

时间:2012-03-10 17:10:45

标签: lisp scheme sicp

提示是定义一个过程,该过程返回三个数中两个最大数的平方和。

我知道这不是一个优雅的解决方案,但这是我一起入侵的原因:

(define (largest-of-two-sum-of-squares x y z)
        (cond ((and (< x y) (< x z)) (sum-of-squares y z))
              ((and (< y z) (< y x)) (sum-of-squares x z))
              ((and (< z x) (< z y)) (sum-of-squares x y)))))

我想知道为什么我会收到错误。

;The object 85 is not applicable

单词object后面的数字总是正确的答案,顺便说一下。我是计划初学者,它必须是我的语法中的东西?

由于

3 个答案:

答案 0 :(得分:3)

这是另一种可能的解决方案,即使在所有三个数字相等或两个相等且低于另一个的情况下,这个解决方案也适用:

(define (sum-max a b c)
  (define (sum x y)
    (+ (* x x) (* y y)))
  (if (>= a b)
      (if (>= b c)
          (sum a b)
          (sum a c))
      (if (>= a c)
          (sum b a)
          (sum b c))))

答案 1 :(得分:1)

正如sindikat指出的那样,一个多余的结束括号。对于那个很抱歉。

答案 2 :(得分:1)

怎么样?
(define (largest-of-two-sum-of-squares x y z)
    (+ (square x) (square y) (square z)
       (- (square (min x y z)))))