LINUX.ORG.RU

совершенно идиотский вопрос о Scheme


0

0

взялся тут на старости лет учить сабж.

споткнулся на одном из первых упражнений:

Упражнение 1.3.
Определите процедуру, которая принимает в качестве аргументов три числа и возвращает сумму квадратов двух больших из них.

Разрешается использовать только cond, if и логические операторы.

функция с суммами квадратов уже есть (описывается в первой главе), осталось найти бОльшие два числа.

пока что получается какая-то паскалеобразная хня с кучей cond'ов.

Если кому не влом - пните в необъодимом направлении, решение не обязательно.

★★★★

Чё с кучей то? Адын, савсем адын. Если сравнение и and отнести 
 к логическим. Пинать куды незнаю, ибо решение под носем ИМХО.
 Вот оно посему. Если есь "не те" операторы, укажы тогда точнее.

(cond
  ((and (>= a c) (>= b c)) (zzz a b))
  ((and (>= a b) (>= c b)) (zzz a c))
  (t (zzz b c)))

bugmaker ★★★★☆
()

(define maxpair-sum-squares (lambda (a b c) (cond ((and (< a b) (< a c)) (sum-squares b c)) ((< b c) (sum-squares a c)) (else (sum-squares a b)))))

Как-то так, видимо?

Disclaimer: Scheme я не знаю прям совсем

anonymous
()
Ответ на: комментарий от anonymous

О. Даже поставил tinyscheme:

$ tinyscheme
TinyScheme 1.37
> (define maxpair-sum-squares (lambda (a b c) (cond ((and (< a b) (< a c)) (sum-squares b c)) ((< b c) (sum-squares a c)) (else (sum-squares a b)))))
maxpair-sum-squares
> (maxpair-sum-squares 1 2 3)
Error: eval: unbound variable: sum-squares

> (define sum-squares (lambda (a b) (+ (* a a) (* b b)))
)
sum-squares
> (maxpair-sum-squares 1 2 3)
13
> (maxpair-sum-squares 1 3 2)
13
> (maxpair-sum-squares 2 1 3)
13
> (maxpair-sum-squares 2 3 1)
13
> (maxpair-sum-squares 3 1 2)
13
> (maxpair-sum-squares 3 2 1)
13
> 

anonymous
()
Ответ на: комментарий от anonymous

угу, спасибо.

мне уже багмейстер объяснил, где именно я ошибался.

З.Ы. к слову, решение было не обязательно, но все равно спасибо :)

gr_buza ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.