2016-01-24 77 views
0

我想寫一個程序,檢查數字是否完美或不使用clojure。我對Clojure或任何其他函數式編程語言都很陌生。如果總是返回零在Clojure

當我刪除第5行的if語句時,它工作正常。但我需要檢查我是否分數。這是我的問題。請檢查我的功能,並告訴我爲什麼它返回零。無論我改變什麼,都會一直回到零。

如果任何人可以一行一行地解釋每一行正在做什麼也會有所幫助。謝謝

(defn perfect [number] 
    (loop [i 1 sum 0] 
    (if (< i number) 
     (recur (+ i 1) 
       (if (= (mod number i) 0) 
       (+ sum i))) 
       sum))) 

回答

4

if總是有兩個分支。如果你只提供一個分支的代碼,另一個只返回nil。如果沒有采取recur分支,您需要爲循環返回一些值。

要清楚的是,儘管您的標題是if,但在此處不是問題,它是if以外的復發返回零。我們在clojure沒有陳述,if就像其他的一樣。

+0

我現在得到它,如果表達式必須有兩個選項。謝謝 – nateDog