2014-05-19 20 views
1

我必須爲haskell中的多項式編寫數據類型。爲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> 

我不知道該怎麼請處理這個錯誤。 我應該在我的代碼中更改什麼?

回答

1

嘿原因列表已經被定義我會用這樣的定義:

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

所以你並不需要保存所有係數。

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 
+0

感謝answear,不允許使用libery中的函數。所以我必須自己定義它,所以我想嘗試類似這樣的事情:[x,y,z] = x + y^2 + z^3 – basti12354