也许我有些急进了,我的第一天学习Clojure时才刚刚接触到函数,但我想要雄心勃勃地编写一个递归函数,将浮点数转换为三进制。如果我通过函数名调用函数而不是使用recur
,它可以正常运行。我理解问题在于我只是在对函数的1元版本进行recur
,在多元函数中如何处理递归的标准方法?我正在阅读的书似乎没有涉及这方面的内容。
(defn float-to-ternary
([x k s]
(def a (int x))
(def r (- x a))
(def carry-string (str s (. Integer toString a 3)))
(cond
(== r 0) carry-string
(> k 20) carry-string
:default (recur (* 3 r) (inc k) carry-string)
)
)
([x]
(def a (int x))
(def r (- x a))
(def carry-string (str (. Integer toString a 3) "."))
(cond
(== r 0) (str (. Integer toString a 3))
:default (recur (* 3 r) 1 carry-string)
)
)
)