大多数参考iterate
都是针对运算符的,并且函数上的所有应用程序都非常混乱,以至于我仍然不知道如何iterate
在我的代码中使用,以及是什么partial
。
我正在做一个编程作业,试图用牛顿的方法来得到一个数字 n 的平方根。也就是说,以猜测作为初始近似值,通过计算近似值和 n/近似值的平均值来继续计算新的近似值。继续,直到两个最近的近似值之间的差异小于 epsilon。
我试图先做近似部分,我相信这是我需要使用迭代和部分的东西。后来epsilon是我需要使用“take”的东西吗?
这是我在没有 epsilon 的情况下进行近似的代码:
(defn sqrt [n guess]
(iterate (partial sqrt n) (/ (+ n (/ n guess)) 2)))
但是,此代码无法正常工作,当我输入时(sqrt 2 2)
,它给了我(3/2 user=> ClassCastException clojure.lang.Cons cannot be cast to java.lang.Number clojure.lang.Numbers.divide (Numbers.java:155)
.
我想这是我需要一遍又一遍地迭代的部分?有人可以给我一些提示吗?同样,这是一个家庭作业问题,所以请不要为我提供整个问题的直接解决方案,我需要一些可以学习的想法和解释。