加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

如何在Clojure中正确使用“iterate”和“partial”?

发布时间:2020-12-14 01:12:17 所属栏目:Linux 来源:网络整理
导读:大多数对iterate的引用都是针对运算符的,而函数上的所有应用程序都是如此令人困惑,以至于我仍然无法在代码中使用iterate,以及部分是什么. 我正在编写一个编程作业,尝试使用牛顿的方法得到数字n的平方根.也就是说,将猜测作为初始近似值,通过计算近似值和n /近
大多数对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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读