Ошибка в начале упражнения в SICP (упражнение 1.3) - PullRequest
2 голосов
/ 10 марта 2012

Подсказка - определить процедуру, которая возвращает сумму квадратов двух самых больших из трех чисел.

Я знаю, что это не совсем элегантное решение, но это то, что я взломал вместе:

(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

Число, которое следует за словом «объект», всегда является правильным ответом, кстати. Я новичок в схеме, это должно быть что-то в моем синтаксисе?

Спасибо

Ответы [ 3 ]

3 голосов
/ 10 марта 2012

Вот еще одно возможное решение, это работает даже в тех случаях, когда все три числа равны или если два равны и ниже, чем другие:

(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 голос
/ 12 марта 2012

А как же

(define (largest-of-two-sum-of-squares x y z)
    (+ (square x) (square y) (square z)
       (- (square (min x y z)))))

1 голос
/ 10 марта 2012

Как указал синдикат, лишняя закрывающая скобка. Извини за это.

...