Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 一个数反转的函数算法_Clojure_Functional Programming - Fatal编程技术网

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只是挂起

我最近一直在玩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 [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,因为那不是一个正确的数字。。。