用于反转数字的功能算法

Igo*_*pov 4 functional-programming clojure

我最近一直在玩Clojure而且我无法使用这个算法:

(defn reverse-number [number reversed]
   (if (= number 0)
     reversed
     (reverse-number (/ number 10) 
                     (+ (rem number 10) (* reversed 10)))))
Run Code Online (Sandbox Code Playgroud)

这就是我应该如何调用它(reverse-number 123 0),我期望的结果是:321.当我运行它时,REPL就会挂起.

有人可以解释我,请问,发生了什么,我做错了什么以及如何让这个功能起作用?

注意:我知道我可以使用字符串函数来反转数字.实际上,我已经这样做了,但我对这个解决方案不感兴趣.我想要的只是实现功能语言的飞跃.这就是我尝试多种方法的原因.

使用字符串函数:

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

(reverse-number 123)  ; --> 321
Run Code Online (Sandbox Code Playgroud)

不喜欢这个版本,因为它感觉就像使用反向的字符串版本作弊.

sou*_*eck 5

你应该使用quot而不是/.

/在clojure中会给你一个分数,所以number永远不会是0(除非它从头开始为0),同时quot会给你"整数除法".

例子:

user=> (/ 123 10)                  
123/10
user=> (quot 123 10)
12
Run Code Online (Sandbox Code Playgroud)