用于反转数字的功能算法

时间:2012-12-30 13:32:16

标签: clojure functional-programming

我最近一直在玩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 个答案:

答案 0 :(得分:5)

您应该使用quot代替/

clojure中的

/会给你一个分数,所以number永远不会为0(除非它从头开始为0),而quot会给你“整数除法”。

示例:

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