我最近一直在玩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
我不喜欢这个版本,因为感觉就像作弊一样,使用反向的字符串版本。
答案 0 :(得分:5)
您应该使用quot代替/
。
/
会给你一个分数,所以number
永远不会为0(除非它从头开始为0),而quot
会给你“整数除法”。
示例:
user=> (/ 123 10)
123/10
user=> (quot 123 10)
12