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

不喜欢这个版本,因为使用 reverse 的字符串版本感觉像是在作弊

4

1 回答 1

5

您应该使用quot而不是/.

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

例子:

user=> (/ 123 10)                  
123/10
user=> (quot 123 10)
12
于 2012-12-30T13:39:56.060 回答