我要在haskell中为多项式写一个数据类型。
结果应该是这样的:
[] = 0:0 [1:0] = 1:0 [3; 2; 1; 0; 0] = x2 + 2x + 3
[0:0] = 0:0 [-5; 22] = 22x - 5 [5; 0; 3; 0; 1] = x4 + 3x2 + 5
我尝试声明一个多项式数据类型:
data Liste
= LeereListe
| Element a (List a)
deriving (Show)
Polynom :: Liste Double
Polynom = Element 1 + (Element 2 * Element 2) + (Element 3 * Element 3 * Element 3)
我的错误:
4.hs:6:2: parse error on input `poly1'
:reload
4.hs:6:1:
Invalid type signature: Polynom :: Liste Double
Should be of form <variable> :: <type>
我不知道如何处理此错误。 我应该在代码中更改什么?
答案 0 :(得分:3)
首先,a
必须是数据类型中的变量,除非声明它,否则不能使用它。
data Liste a
= LeereListe
| Element a (List a)
deriving (Show)
其次,值必须以小写字母开头。由于您没有定义instance Num
或任何便利函数,我们必须使用类型的构造函数在结构上创建值:
polynom :: Liste Double
polynom = Element 1 (Element 2 (Element 3 (Element 4 LeereListe)))
我想我可能会这样做,而不是定义一个新的结构:
newtype Polynomial = Polynomial [Double] deriving Show
evaluate :: Polynomial -> Double -> Double
evaluate (Polynomial coeff) x = sum $ zipWith (*) (iterate (x*) 1) coeff
答案 1 :(得分:1)
嘿原因列表已经定义我会使用这个定义:
data Polynom = Polynom [(Double,Double)]
polyEval (Polynom []) a = 0
polyEval (Polynom (x:xs) ) a = (fst x) *a^(snd x) + polyEval (Polynom xs) a
所以你不需要存储所有系数。