2012-12-30 33 views
4

我一直在玩的Clojure最近,我不能讓這個算法的工作:功能算法,扭轉了一些

(defn reverse-number [number reversed] 
    (if (= number 0) 
    reversed 
    (reverse-number (/ number 10) 
        (+ (rem number 10) (* reversed 10))))) 

這是我應該怎麼稱呼它(reverse-number 123 0),我希望結果是: 321。 當我運行這個,REPL只是掛起

有人可以解釋我,請問,發生了什麼,我做錯了什麼,以及如何讓這個功能工作?

注意:我知道我可以使用字符串函數來反轉一個數字。其實,我已經這樣做了,但我對這個解決方案不感興趣。我想要的是讓功能語言飛躍。這就是爲什麼我嘗試多種方法。

使用字符串函數

(defn reverse-number [n] 
    (Integer. (clojure.string/reverse (str n)))) 

(reverse-number 123) ; --> 321 

不喜歡這個版本,因爲它感覺就像使用反向的字符串版本作弊

+1

什麼會'3210'可以在扭轉? – Gumbo

+0

@Gumbo:'123',爲什麼?這是我期望的答案。我當然不會指望'0123',因爲那不會是一個正確的數字...... –

回答

5

您應該使用quot而不是/

/在clojure會給你一個分數,所以number將永遠不會是0(除非它從0開始),而quot會給你「整數除法」。

例子:

user=> (/ 123 10)     
123/10 
user=> (quot 123 10) 
12 
+0

+1 - 我正要問Clojure如何實現截斷分割。 –

+0

是的,就是這樣......非常感謝:) –