如何在Clojure中正确使用“iterate”和“partial”?
大多数对iterate的引用都是针对运算符的,而函数上的所有应用程序都是如此令人困惑,以至于我仍然无法在代码中使用iterate,以及部分是什么.
我正在编写一个编程作业,尝试使用牛顿的方法得到数字n的平方根.也就是说,将猜测作为初始近似值,通过计算近似值和n /近似值的平均值来保持计算新的近似值.继续,直到两个最近的近似值之间的差异小于epsilon. 我首先尝试做近似部分,我相信这是我需要使用迭代和部分.后来epsilon是我需要用“拿”的东西? 这是我没有epsilon的近似代码: (defn sqrt [n guess] (iterate (partial sqrt n) (/ (+ n (/ n guess)) 2))) 这段代码不能正常工作,当我输入(sqrt 2 2)时,它给了我(3/2 user => ClassCastException clojure.lang.Cons不能强制转换为java.lang.Number clojure.lang.Numbers.divide (Numbers.java:155). 我想这是我需要反复迭代的部分?有人可以给我一些提示吗?再次,这是一个家庭作业问题,所以请不要直接解决整个问题,我需要一些我可以学习的想法和解释. 解决方法
partial为该函数获取一个函数和至少一个参数,并返回一个需要其余参数的新函数.
(def take-five (partial take 5)) (take-five [1 2 3 4 5 6 7 8 9 10]) ;=> (1 2 3 4 5) iterate通过采用两个参数生成无限序列:函数和种子值.种子值用作生成列表中的第一个元素,第二个元素通过将函数应用于种子来计算,第二个值用作函数的输入以获取第三个值,依此类推. (take-five (iterate inc 0)) ;=> (0 1 2 3 4) ClojureDocs提供了有关这两个功能的良好文档:http://clojuredocs.org/clojure_core/clojure.core/iterate和http://clojuredocs.org/clojure_core/clojure.core/partial. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |