让用法调用另一个函数

时间:2016-08-06 10:34:12

标签: clojure let

我迷失了以下代码试图计算平方根。 代码是:

(defn tempsqrt [x p i]
  (if (< i 2) 
    p
    (tempsqrt x (+ (/ x (* 2 p)) (/ p 2)) (- i 1))))

(defn mysqrt [x]
  (let  [i 10 
         p (/ x 5)]
    (tempsqrt x p i)))

当我在逆时针方向执行(msqrt 1)时,似乎我得到一个无限循环,因为我必须强行停止处理。 我试图在i中输出pmysqrt并且它们似乎计算得很好,我认为某处肯定会有一些愚蠢的问题,但我无法找到它

1 个答案:

答案 0 :(得分:0)

在我的机器上按预期工作。

boot.user=> (defn mysqrt [x]
       #_=>   (let  [i 10
       #_=>         p (/ x 5)]
       #_=>   (tempsqrt x p i)))
#'boot.user/mysqrt
boot.user=> (defn tempsqrt [x p i]
       #_=>   (println i)
       #_=>   (if (< i 2) p
       #_=>       (tempsqrt x (+ (/ x (* 2 p)) (/ p 2)) (- i 1))))
#'boot.user/tempsqrt
boot.user=> (mysqrt 1)
10
9
8
7
6
5
4
3
2
1
19323349832288915105454068722019581055401465761603328550184537628902466746415537000017939443193837284332679428868611117710999636580698761476491418202290083264324580207274376284652360489310800028152901586154293130345674316605555829428921442625537/19323349832288915105454068722019581055401465761603328550184537628902466746415537000017939416378221424447485229720561121299307381621967120291704662755167195820796520060180422680903764155503944648089185213182191422837908692712415936561623430457345