Ошибка в начале упражнения в SICP (упражнение 1.3)

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

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

(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

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

Спасибо


person Miles    schedule 10.03.2012    source источник
comment
У вас есть одна лишняя закрывающая скобка.   -  person Mirzhan Irkegulov    schedule 10.03.2012
comment
Что происходит с 6 6 6 в качестве входных данных? :-)   -  person 6502    schedule 10.03.2012


Ответы (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))))
person Óscar López    schedule 10.03.2012
comment
А почему минус? мое решение правильное, и он ОП уже нашел проблему в своем коде, я просто указываю другую альтернативу. - person Óscar López; 10.03.2012

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

person Miles    schedule 10.03.2012
comment
@ÓscarLópez: или если два равны и ниже другого - person 6502; 11.03.2012

Как насчет

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

?

person 6502    schedule 11.03.2012
comment
Приведенное выше решение, конечно, правильное, но, учитывая место в книге SICP, где указано упражнение 1.3, предполагается, что читатель еще не знает о процедуре min. Разрешены только условные выражения - person Óscar López; 12.03.2012