gpt4 book ai didi

clojure - 如何在 Clojure 中正确使用 "iterate"和 "partial"?

转载 作者:行者123 更新时间:2023-12-02 16:38:03 24 4
gpt4 key购买 nike

大多数对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 无法转换为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/iteratehttp://clojuredocs.org/clojure_core/clojure.core/partial

关于clojure - 如何在 Clojure 中正确使用 "iterate"和 "partial"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19750215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com