2012-03-10 132 views
2

提示是定義一個返回三個數字中兩個最大值的平方和的過程。SICP練習中的錯誤(練習1.3)

我知道這不完全是一個完美的解決方案,但是這是我砍死在一起:

(define (largest-of-two-sum-of-squares x y z) 
     (cond ((and (< x y) (< x z)) (sum-of-squares y z)) 
       ((and (< y z) (< y x)) (sum-of-squares x z)) 
       ((and (< z x) (< z y)) (sum-of-squares x y))))) 

什麼我不知道是爲什麼我得到一個錯誤。

;The object 85 is not applicable 

單詞對象後面的數字總是正確的答案,順便說一句。我是一個計劃初學者,它必須是我的語法中的東西?

謝謝

+1

你有一個多餘的右括號。 – 2012-03-10 17:13:59

+2

6 6 6作爲輸入會發生什麼? :-) – 6502 2012-03-10 17:43:01

回答

1

正如sindikat指出,一個多餘的右括號。對於那個很抱歉。

+0

請將您的答案標記爲正確的以關閉此問題:) – 2012-03-11 10:37:00

+1

這不是「正確的」,如果三個數字相等,則失敗 – 2012-03-11 14:08:52

+2

@ÓscarLópez:或者兩個相等並且低於另一個 – 6502 2012-03-11 14:24:24

3

這裏的另一種可能的解決方案,這一項工作即使在所有這三個數是相等的,或者兩個是比其他所有同等或更低的情況:

(define (sum-max a b c) 
    (define (sum x y) 
    (+ (* x x) (* y y))) 
    (if (>= a b) 
     (if (>= b c) 
      (sum a b) 
      (sum a c)) 
     (if (>= a c) 
      (sum b a) 
      (sum b c)))) 
+2

爲什麼downvote?我的解決方案是正確的,而且他OP已經在他的代碼中發現了問題,我只是指出另一個選擇。 – 2012-03-10 17:40:07

1

什麼

(define (largest-of-two-sum-of-squares x y z) 
    (+ (square x) (square y) (square z) 
     (- (square (min x y z))))) 

+0

上面的解決方案當然是正確的,但考慮到SICP書中陳述練習1.3的要點,讀者不應該「知道」'min'程序。只有條件表達式纔會被允許 – 2012-03-11 22:24:30