1

我必须在 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>

我不知道如何处理这个错误。我应该在我的代码中更改什么?

4

2 回答 2

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
于 2014-05-19T18:08:15.543 回答
1

嘿,原因列表已定义,我将使用此定义:

data Polynom   = Polynom [(Double,Double)]
polyEval (Polynom []) a = 0
polyEval (Polynom (x:xs) ) a = (fst x) *a^(snd x) + polyEval (Polynom xs) a

所以你不需要存储所有的系数。

于 2014-05-20T06:40:15.297 回答