Haskell无法编译

Haskell无法编译,haskell,types,polynomials,Haskell,Types,Polynomials,正如我所遇到的问题一样,在纸上所有的东西都应该工作,但是编译器给出了一个我无法理解的错误 data Polynom = Polynom[Double] deriving Show calcPolynom :: Double -> Polynom -> Double calcPolynom _ [] = 0.0 calcPolynom _ Polynom [] = 0.0 calcPolynom n Polynom[h:ts] = h + n* Polyn

正如我所遇到的问题一样,在纸上所有的东西都应该工作,但是编译器给出了一个我无法理解的错误

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个参数,但没有给出任何参数”。 但我确实这样做了,而且还需要为空多项式定义它

有人能帮忙吗?我对哈斯克尔真的很陌生,我真的很感激任何帮助:)

附加信息:我希望多项式是一个双重列表,即。 2x³-1.4x²+2.5=[2.5,0,-1.4,2]

试试看

calcPolynom _ (Polynom []) = 0.0
calcPolynom n (Polynom (h:ts)) = h + n * calcPolynom n (Polynom ts)
当您尝试模式匹配构造函数时,必须将其括在括号中。这不仅适用于多项式数据类型,还适用于列表<代码>[h:ts]与您期望的没有什么不同,它只与一个元素(即列表)的列表(
[[?]]
)匹配。最后,必须递归函数,而不是数据类型。

试试看

calcPolynom _ (Polynom []) = 0.0
calcPolynom n (Polynom (h:ts)) = h + n * calcPolynom n (Polynom ts)
当您尝试模式匹配构造函数时,必须将其括在括号中。这不仅适用于多项式数据类型,还适用于列表<代码>[h:ts]与您期望的没有什么不同,它只与一个元素(即列表)的列表(
[[?]]
)匹配。最后,必须递归函数,而不是数据类型。

试试看

calcPolynom _ (Polynom []) = 0.0
calcPolynom n (Polynom (h:ts)) = h + n * calcPolynom n (Polynom ts)
当您尝试模式匹配构造函数时,必须将其括在括号中。这不仅适用于多项式数据类型,还适用于列表<代码>[h:ts]与您期望的没有什么不同,它只与一个元素(即列表)的列表(
[[?]]
)匹配。最后,必须递归函数,而不是数据类型。

试试看

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

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

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

calcPolynom _ (Polynom []) = 0.0
calcPolynom n (Polynom (h:ts)) = h + n * ???
我在
中留了一个空白供您填写,您必须找出应该去那里的内容,而不是您现在拥有的内容。原因是不能将
Double
类型的值与
Polynom
类型的值相乘,但可以递归编写(我假设这是您的初衷)

当你有这样的代码时

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

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

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

calcPolynom _ (Polynom []) = 0.0
calcPolynom n (Polynom (h:ts)) = h + n * ???
我在
中留了一个空白供您填写,您必须找出应该去那里的内容,而不是您现在拥有的内容。原因是不能将
Double
类型的值与
Polynom
类型的值相乘,但可以递归编写(我假设这是您的初衷)

当你有这样的代码时

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

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

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

calcPolynom _ (Polynom []) = 0.0
calcPolynom n (Polynom (h:ts)) = h + n * ???
我在
中留了一个空白供您填写,您必须找出应该去那里的内容,而不是您现在拥有的内容。原因是不能将
Double
类型的值与
Polynom
类型的值相乘,但可以递归编写(我假设这是您的初衷)

当你有这样的代码时

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

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

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

calcPolynom _ (Polynom []) = 0.0
calcPolynom n (Polynom (h:ts)) = h + n * ???
我在
中留了一个空白供您填写,您必须找出应该去那里的内容,而不是您现在拥有的内容。原因是不能将
Double
类型的值与
Polynom
类型的值相乘,但可以递归编写(我假设这是您的初衷)

当你有这样的代码时

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

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

非常感谢!!当然,我想写递归,很快就明白了。非常感谢!!当然,我想写递归,很快就明白了。非常感谢!!当然,我想写递归,很快就明白了。非常感谢!!当然我想写递归,很快就明白了谢谢!帮了很多忙!非常感谢。帮了很多忙!非常感谢。帮了很多忙!非常感谢。帮了很多忙!