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 に答える