0

像往常一样,我遇到了这个问题,在纸上一切都应该工作,但编译器给出了一个我无法理解的错误。

data Polynom = Polynom[Double] 
           deriving Show



calcPolynom :: Double -> Polynom -> Double
calcPolynom _ [] = 0.0
calcPolynom _ Polynom [] = 0.0
calcPolynom n Polynom[h:ts] = h + n* Polynom[ts]

给出错误“构造函数 `Polynom' 应该有 1 个参数,但没有给出”。但我确实并且需要为空多项式定义它。

有人可以帮忙吗?我对haskell真的很陌生,我真的很感激任何帮助:)

附加信息:我希望多项式成为双精度列表,即 2x³ - 1.4x² + 2.5 = [2.5,0,-1.4,2]

4

2 回答 2

2

您只需要一些括号并修复您的模式匹配:

calcPolynom _ (Polynom []) = 0.0
calcPolynom n (Polynom (h:ts)) = h + n * ???

我在 处留了一个空白让你填写???,你必须弄清楚应该去那里而不是你现在拥有的东西。原因是您不能将 typeDouble的值与type 的值相乘Polynom,但您可以递归地编写它(我假设这是您的初衷)。

当您有类似的代码时

calcPolynom n Polynom [h:ts] = ...

编译器看到calcPolynom有 3 个参数并且Polynom没有,您使用括号进行分组。

于 2014-05-15T17:35:47.547 回答
1

尝试

calcPolynom _ (Polynom []) = 0.0
calcPolynom n (Polynom (h:ts)) = h + n * calcPolynom n (Polynom ts)

当您尝试对构造函数进行模式匹配时,必须将其括在括号中。这不仅适用于您的 Polynom 数据类型,也适用于列表。[h:ts]与您期望的没有什么不同,它[[?]]与只有一个元素(即列表)的列表()匹配。最后,您必须递归函数,而不是数据类型。

于 2014-05-15T17:35:34.807 回答