data SomeData = A Int
| B Int
| C Int
list :: [SomeData]
list = [ A 1, B 2, C 3]
wantedData = filter (?) list -- wantedData is A 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
對於上面的代碼,我應該使用什麼函數(?)以便獲得所需的數據?從列表中獲取所需的數據
如果你只想要列表包含A
值,那麼這應該作爲您謂:
isA (A _) = True
isA _ = False
這只是模式匹配。
更接近寫匿名函數的能力,而不必定義一個新函數,是一個列表理解。
例如,你可以說
list = [ A 1, B 2, C 3]
wantedData = [ A n | A n <- list ] -- result: [A 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]
我認爲OP希望你擁有了被標記的所有數據的功能'A' – amindfv 2013-03-03 17:36:42
@amindfv:啊,好的,你說得對。爲了獲得標有A的所有數據,您的列表解析解決方案更好。 ;) – jimmyt 2013-03-03 19:09:18