Для начала, мы могли бы использовать вспомогательную процедуру для реализации sum
только один раз:
(define (sum x y)
(+ (* x x) (* y y)))
Теперь для условий: учитывая, что порядок не имеет значения - (sum a b)
является так же, как (sum b a)
, нужно рассмотреть только 4 случая, и мы можем избежать повторения некоторых сравнений, вложив if
s:
(define (sum-max a b c)
(if (>= a b)
(if (>= b c)
(sum a b)
(sum a c))
(if (>= a c)
(sum b a)
(sum b c))))