Clojure 一个数反转的函数算法
我最近一直在玩Clojure,但我无法让这个算法工作:Clojure 一个数反转的函数算法,clojure,functional-programming,Clojure,Functional Programming,我最近一直在玩Clojure,但我无法让这个算法工作: (defn reverse-number [number reversed] (if (= number 0) reversed (reverse-number (/ number 10) (+ (rem number 10) (* reversed 10))))) 这就是我应该如何称呼它的(反向号码1230),我期望的结果是:321。 当我运行这个时,REPL只是挂起
(defn reverse-number [number reversed]
(if (= number 0)
reversed
(reverse-number (/ number 10)
(+ (rem number 10) (* reversed 10)))))
这就是我应该如何称呼它的(反向号码1230)
,我期望的结果是:321
。
当我运行这个时,REPL只是挂起
有人能给我解释一下发生了什么事,我做错了什么,以及如何让这个函数工作吗?
注意:我知道我可以使用字符串函数反转数字。实际上,我已经这样做了,但我对这个解决方案不感兴趣。我所要做的就是向函数式语言迈进。这就是我尝试多种方法的原因
使用字符串函数:
(defn reverse-number [n]
(Integer. (clojure.string/reverse (str n))))
(reverse-number 123) ; --> 321
我不喜欢这个版本,因为使用字符串版本的reverse会让人感觉像作弊一样。你应该使用而不是/
clojure中的/
将为您提供一个分数,因此number
永远不会为0(除非从一开始就是0),而quot
将为您提供“整数除法”
示例:
user=> (/ 123 10)
123/10
user=> (quot 123 10)
12
+1-我正要问Clojure是如何实现截断除法的。
3210
的反方向是什么?@Gumbo:123
,为什么?这就是我所期望的答案。我当然不会期望0123,因为那不是一个正确的数字。。。