あなたの学習には細部を重視していません。あなたのコードには無数の間違いがあり、あなたは他の言語の習慣をあなたのスキームの学習に持ち込むことができます。 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のプロシージャアプリケーションに使用されます。意味をなさない -
は、上記の行が
((+ (sqr 1) (sqr 3))(+ (sqr 1) (sqr 2)))
((+ 1 9 )(+ 1 4 ))
(10 5)
最後の行は「数10に数5を適用する」と言う(10 5)
であるのと同等になり、a = 1
、b = 2
、およびc = 3
言います。
コードの後半でも同じ誤りがあります。これらの問題を修正してから、質問を更新してください。
ps:sum_of_greatest_squares
のようなsnake_caseの名前は使用しないでください。スキーマは通常、それをsum-of-greatest-squares
と書式設定します。
とにかくあなたの手続きが何をすべきかはすぐに分かりません。私のの推測は、2つの最大の入力を2乗して合計することになっているということです。
あなたはで計算を実行するためにどの二つの引数を決定するif
式の巨大な階層を行うことができます...しかし、もう一つの方法は、常に結果を計算するために同じ2つの引数を使用することですが、それに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)))))
これは常に2つの偉大な数字の二乗を合計するあなたの手順に横代替としてこれを考えてみましょうが、はるかにきれいな方法でそうする
最後に、イェルク実際に何も印刷していないと言います。 DrRacketがあなたのプログラムの結果をInteractionsウィンドウに表示していないことを暗示することを意味します。ただし、コンソールに明示的に印刷したい場合は、display* and print* procedures
どこでも印刷しません。 –
http://stackoverflow.com/help/mcve – naomik