gpt4 book ai didi

haskell - 没有 (Show (Double -> Double)) 的实例

转载 作者:行者123 更新时间:2023-12-02 09:24:14 25 4
gpt4 key购买 nike

我有以下代码,它使用牛顿法来近似某个数字的平方根。问题是,当我运行它时,出现错误。出了什么问题,如何修复它?

newtonRootSequence :: Double -> [Double]
newtonRootSequence d = newtonSequenceGenerator d 1

newtonSequenceGenerator :: Double -> Double -> [Double]
newtonSequenceGenerator d xn = nxplus1 : newtonSequenceGenerator d nxplus1
where nxplus1 = (xn + d / xn) / 2

newtonRoot:: Double -> Double -> Double
newtonRoot d epsilon = head ([xs !! index | index <- [1..((length xs) - 1)], (xs !! index) - (xs !! index - 1) <= epsilon]
where xs = newtonRootSequence d

错误:

 <interactive>:2:1: error:
* No instance for (Show (Double -> Double))
arising from a use of `print'
(maybe you haven't applied a function to enough arguments?)
* In a stmt of an interactive GHCi command: print it

运行它应该如下所示:

$newtonRoot 35

最佳答案

在 Haskell 中,所有函数都是柯里化(Currying)的,所以,你的函数

newtonRoot:: Double -> Double -> Double

它们是“隐藏的括号”:

newtonRoot:: Double -> (Double -> Double)

如果您提供一个参数newtonRoot 35,您就有

(newtonRoot 35) :: Double -> Double

并且函数 f::Double -> Double 不是 Show 类型类的实例

您最终需要为函数值提供最后一个参数:

(newtonRoot 35 2) :: Double

我可以显示双倍

关于haskell - 没有 (Show (Double -> Double)) 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47229452/

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