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)
我不喜欢这个版本,因为它感觉就像使用反向的字符串版本作弊.
你应该使用quot而不是/.
/在clojure中会给你一个分数,所以number永远不会是0(除非它从头开始为0),同时quot会给你"整数除法".
例子:
user=> (/ 123 10)
123/10
user=> (quot 123 10)
12
Run Code Online (Sandbox Code Playgroud)