Haskell 没有(显示(双精度->;双精度))的实例

Haskell 没有(显示(双精度->;双精度))的实例,haskell,Haskell,我有下面的代码,它使用牛顿的方法来近似一些数字的平方根。问题是,当我运行它时,我得到一个错误。什么是错误的,如何修复它? newtonRootSequence :: Double -> [Double] newtonRootSequence d = newtonSequenceGenerator d 1 newtonSequenceGenerator :: Double -> Double -> [Double] newtonSequenceGenerator d xn =

我有下面的代码,它使用牛顿的方法来近似一些数字的平方根。问题是,当我运行它时,我得到一个错误。什么是错误的,如何修复它?

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
newtonRootSequence::Double->[Double]
newtonRootSequence d=newtonSequenceGenerator d 1
newtonSequenceGenerator::Double->Double->[Double]
newtonSequenceGenerator d xn=nxplus1:newtonSequenceGenerator d nxplus1
其中nxplus1=(xn+d/xn)/2
newtonRoot::Double->Double->Double

newtonRoot d epsilon=head([xs!!index | index
newtonRoot
接受两个参数,一个
d
和一个
epsilon
。您没有提供
epsilon
。试试看

> newtonRoot 35 0.1
相反


还有其他错误,但这应该让您开始调试路径。

在Haskell中,所有函数都是curryfied,因此,您的函数

newtonRoot:: Double -> Double -> Double
以下是“隐藏括号”:

如果您提供一个参数
newtonRoot 35

(newtonRoot 35) :: Double -> Double
函数
f::Double->Double
不是Show类型类的实例

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

(newtonRoot 35 2) :: Double

Double can me显示了

您编写了什么查询?在我看来,您编写了类似于
Newton Root 3
的内容。您在哪里打印?您似乎正在尝试打印一个部分应用的函数。您注意到消息了吗?(可能您没有将函数应用到足够的参数?)?
(newtonRoot 35) :: Double -> Double
(newtonRoot 35 2) :: Double