0

こんにちは、現在、プレリュードで elem 関数を使用しようとしています。

data MyType = A Int
            | B Int Int
            | C Int
            | D Int Int
     deriving (Show,Eq)

list = [ A _, B _ _ ]    

また

list = [ A Int, B Int Int ]

bool = (A 12) elem list  -- use like this to get a Boolean value.

問題はリストです。(両方とも) コンパイル エラーが発生します。リストを定義する正しい方法を教えてもらえますか?

おっと、メイン コードのデータと派生 (Show,Eq) については、すべて実行しました。この質問の理由は、MyType の大きなリストがあり、大きなリストから 1 つまたは 2 つのタイプを選択して変更し、元に戻したいからです。どうすればよいですか? 経験値 bigList=[ A 3, C 6, A 5, B 5 8, D 5 6 ] データ型 ( A Int ) と (B Int Int) のみを選択したいのですが、2 つのデータ型のすべての値を変更する可能性があります変更後、元に戻すので、新しいリストになります。newBigList=[ A 0, C 6, A 0, B 0 0, D 5 6 ]

ありがとう

4

1 に答える 1

7

まず第一に、それはそうではdataありませんData。第 2 に、型変数 ( Int) を定義する際に値とlist混合していますが_、 はパターン マッチングでのみ使用できます。type のリストを作成するには、代わりに次のように記述します[MyType]

list = [A 12, B 1 5]

第三に、宣言は中置演算子としてbool使用elem :: Eq a => a -> [a] -> Boolされますが、他の関数と同様です。どちらかを書く

bool = elem (A 12) list

また

bool = (A 12) `elem` list

の型シグネチャからわかるように、型クラスelemを派生させる必要がありますEq。値も出力できると便利な場合があるため、型宣言の最後にMyType追加することを検討してください。deriving (Eq,Show)

Haskell を Prolog と間違えているようです。Haskell は Prolog のように統合して動作しません。基本から良いチュートリアルや本を読み始める必要があります。

于 2012-05-24T15:30:12.010 に答える