1
data SomeData = A Int
              | B Int
              | C Int

list :: [SomeData]
list = [ A 1, B 2, C 3]

wantedData = filter (?) list -- wantedData is A 1

上記のコードで、目的のデータを取得するには、どの関数を (?) 入れればよいでしょうか?

4

3 に答える 3

4

リストに値のみを含めたい場合はA、これが述語として機能するはずです。

isA (A _) = True
isA _ = False

あくまでもパターンマッチングです。

于 2013-03-03T05:08:43.390 に答える
3

無名関数を書く能力に近く、新しい関数を定義する必要がないのは、リスト内包表記です。

たとえば、次のように言えます。

list = [ A 1, B 2, C 3]

wantedData = [ A n | A n <- list ] -- result: [A 1]
于 2013-03-03T08:11:52.597 に答える
1

別の可能性:

data SomeData = A Int | B Int | C Int
                            deriving (Show, Read, Eq)

list :: [SomeData]
list = [ A 1, B 2, C 3 ]

wantedData :: [SomeData]
wantedData = filter (== A 1) list             -- wantedData is A 1

テスト:

> wantedData 
> [A 1]
于 2013-03-03T13:42:52.823 に答える