【发布时间】:2018-03-29 01:18:03
【问题描述】:
我可能有点超前了,在我学习 Clojure 的第一天,我几乎没有接触过函数,但我想我会雄心勃勃地制作一个递归函数来将浮点值转换为三进制。如果我按名称而不是使用 recur 调用函数,它会很好用。我理解问题是我只是recuring 函数的 1-arity 版本,是否有标准方法来处理多arity 函数中的递归?我正在阅读的书似乎没有涵盖它。
(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)
)
)
)
【问题讨论】:
-
(. Integer toString a 3)~=(Integer/toString a 3)
标签: function recursion clojure