エントリを削除した場合は、次の-
ように非常に迅速に行うことができます。
Prelude> (map (map read) . map words. lines $ "('a',3) ('b',4)\n('c',5)")::[[(Char,Int)]]
[[('a',3),('b',4)],[('c',5)]]
またはそれを関数として定義する
genericReadLines :: Read a => String -> [[a]]
genericReadLines = map (map read) . map words. lines
このように使用できるもの:
*Main> (genericReadLines "('a',3) ('b',4)\n('c',5)")::[[(Char,Int)]]
[[('a',3),('b',4)],[('c',5)]]
しかし、あなたはそれをする方が簡単だと思うかもしれません
readCharInts :: String -> [[(Char,Int)]]
readCharInts = genericReadLines
readInts :: String -> [[Int]]
readInts = genericReadLines
だからあなたはただタイプすることができます
*Main> readInts "1 2 3\n4 5 6\n7 8 9"
[[1,2,3],[4,5,6],[7,8,9]]
*Main> readCharInts "('a',3) ('b',4)\n('c',5)"
[[('a',3),('b',4)],[('c',5)]]
しかし、維持するのは-
どうですか?リスト内の特定のポイントに値がないことを表すには、多分データ型を使用する必要があります。の省略形およびの省略-
形として使用できます。Nothing
a
Just a
read' :: Read a => String -> Maybe a
read' "-" = Nothing
read' xs = Just (read xs)
データが壊れやすい可能性がある場合、そのコードは壊れやすいことを警告する必要がありますが'-'
、そうではない可能性があります。
genericMaybeReadLines :: Read a => String -> [[Maybe a]]
genericMaybeReadLines = map (map read') . map words. lines
その後、私たちは持つことができます
readMaybeCharInts :: String -> [[Maybe (Char,Int)]]
readMaybeCharInts = genericMaybeReadLines
readMaybeInts :: String -> [[Maybe Int]]
readMaybeInts = genericMaybeReadLines
だから今私たちはできる
*Main> readMaybeCharInts "('a',3) ('b',4)\n- ('c',5)"
[[Just ('a',3),Just ('b',4)],[Nothing,Just ('c',5)]]
*Main> readMaybeInts "2 3 -\n4 - 2"
[[Just 2,Just 3,Nothing],[Just 4,Nothing,Just 2]]