Его простота, чтобы увидеть, что вы не очень подробно ориентированы на свое обучение. Ваш код содержит бесчисленные ошибки, и вы позволили себе привнести привычки с других языков в изучение схемы. DrRacket ясно показывает, что в вашей программе есть синтаксическая ошибка, так что это хорошее место для начала.
Срезы Я полужирный пропускаете else
выражение
(define (sum_of_greatest_squares a b c)
(if(> a b)
(if(> a c)
(if(> b c) ((+ (sqr a) (sqr c))(+ (sqr a) (sqr b))))
(+ (sqr a) (sqr c))
)
(if(> b c)
(if (> a c) ((+ (sqr a) (sqr b))(+ (sqr b) (sqr c)))
(+ (sqr c) (sqr b))))
))
Форматирование кода является плохой и, таким образом, делает его труднее увидеть, где были допущены ошибки.
Двигаясь, вот еще одна большая ошибка
((+ (sqr a) (sqr c))(+ (sqr a) (sqr b)))
Вы не можете просто положить ()
туда, куда вы хотите, как вы можете в некоторых языках. ()
используются для применения процедуры в Lisp/Scheme/Racket.
Say a = 1
, b = 2
и c = 3
, выше линии будет эквивалентно
((+ (sqr 1) (sqr 3))(+ (sqr 1) (sqr 2)))
((+ 1 9 )(+ 1 4 ))
(10 5)
последняя строка (10 5)
, которая говорит «применить номер 5 к номеру 10» - который не имеет никакого смысла.
Вы также вносите ту же ошибку позже в код. Сначала попробуйте устранить эти проблемы, а затем обновите свой вопрос.
ps: не использовать имена snake_case, такие как sum_of_greatest_squares
. Схемы обычно форматировали бы как sum-of-greatest-squares
.
Непонятно, что ваша процедура должна делать в любом случае. Мой угадывает заключается в том, что он должен квадратировать два самых больших входа, а затем суммировать их.
You могли сделать огромную иерархию if
выражений, чтобы решить, какие два аргумента для выполнения вычислений с ... но другой путь будет всегда использовать одни и те же два аргумента, чтобы вычислить результат, но использовать if
выражения для переместите соответствующие аргументы в нужное место.
Рассмотрим это в качестве боковой альтернативы вашей процедуре
(define (sqr x) (* x x))
(define (sum-of-greatest-squares a b c)
(cond ((< a b) (sum-of-greatest-squares b c a))
((< b c) (sum-of-greatest-squares a c b))
(else (+ (sqr a) (sqr b)))))
Это всегда просуммировать квадраты двух больших чисел, но делает это в более простой способ
Наконец, Йорг что вы ничего не печатаете нигде. Я знаю, что вы подразумеваете, что DrRacket не показывает результат вашей программы в окне Взаимодействия.Однако, если вы хотите явно напечатать на консоли, посмотрите на display* and print* procedures
Вы ничего не печатаете нигде. –
http://stackoverflow.com/help/mcve – naomik