它很簡單,看到你不是很注重細節和你的學習。你的代碼包含無數的錯誤,你已經允許自己把習慣從其他語言帶入你的學習計劃。 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中的程序應用。
說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
。 Schemers通常會將其格式設置爲sum-of-greatest-squares
。
目前尚不清楚你的程序應該做什麼。我的猜測是它應該平方兩個最大的輸入,然後求和它們。
您可以做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沒有在Interactions窗口中顯示你的程序的結果。但是,如果你想明確地打印到控制檯,看看display* and print* procedures
你是不是在任何地方打印任何東西。 –
http://stackoverflow.com/help/mcve – naomik