2013-06-23 65 views
2

我剛開始學習Scheme。計劃 - 我的gcd()總是返回零

我寫了一個函數gcd(),但它總是返回0

(define (gcd a b) 
    (cond (= b 0) 
     (a) 
    (else ((gcd b (modulo a b)))) 
    ) 
) 

爲什麼我錯了?

+0

括號問題。使用一個好的IDE並正確縮進來避免這種麻煩,現在看看我的答案,看看出了什麼問題。 –

+0

值得注意的是,您的gcd只有在a> = b時才能正常工作。 – carla

回答

8

這應該可以解決的問題:

(define (gcd a b) 
    (cond [(= b 0) a] 
     [else (gcd b (modulo a b))])) 

你被錯誤地周圍的括號之間的一些表情和一些括號裏從cond表達缺失。

注意,在方案中,當你周圍的東西在括號,說(a)你告訴翻譯:a是不帶參數的過程,我想調用它,這是不是在這裏的情況,a是隻是一個數字。

此外,爲便於閱讀的緣故,它的使用[]而不是()每個條件的cond表達分開,一個好主意,如上面的我的代碼 - 但不要忘記他們,他們是強制性的,在你的代碼中,你在第一個條件中忘記了它們。

3

其他人已經描述了你的錯誤和你應該做的事情。

考慮代碼如何實際運行以及爲什麼它會生成您看到的輸出也很有指導意義。由於缺少括號,您的cond的第一個案例是(= b 0)。第一件事(=)被視爲條件。除了#f以外的所有內容都是真實的,所以這一切都是真實的。既然這是事實,那麼這個案例就會被評估。具體而言,括號中的其餘部分被視爲(可能多個)表達式來評估,作爲隱含的begin。所以基本上它評估(begin b 0)。結果是最後一個表達式0的結果。