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

ストリングバージョンのリバースを使ってごまかしているような気がするので、このバージョンは好きではありません。

4

1 に答える 1

5

の代わりにquotを使用する必要があり/ます。

/in clojureは分数を与えるので、number0になることはありません(最初から0でない限り)が、quot「整数除算」を与えます。

例:

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