今日は,「Learn You a Haskell for Great Good!」の
7. Modules
を斜め読みしてます。まだ読みかけです。
Data.Mapのところが面白くもあり,難しくもあります。
例えば,
phoneBook = [("betty", "555-2938") ,("bonnie", "452-2928") ,("patsy", "493-2928") ,("lucille", "205-2928") ,("wendy", "939-82822") ,("penny", "853-2492") ]
のとき,
findKey1 :: (Eq k) => k -> [(k,v)] -> Maybe v findKey1 key [] = Nothing findKey1 key ((k,v):xs) = if key == k then Just v else findKey1 key xs
なら,分かりやすいのですが、
findKey2 :: (Eq k) => k -> [(k,v)] -> Maybe v findKey2 key = foldr (\(k,v) acc -> if key == k then Just v else acc) Nothing
になると難しいです…。っが,面白いです。
foldlの練習も兼ねて,
findKey3 :: (Eq k) => k -> [(k,v)] -> Maybe v findKey3 key = foldl (\acc (k,v) -> if key == k then Just v else acc) Nothing
と書いてみたりしました。
最後に,scanlの練習も兼ねて,
findKey4 :: (Eq k) => k -> [(k,v)] -> [Maybe v] findKey4 key = scanl (\acc (k,v) -> if key == k then Just v else acc) Nothing
と書いてみました。findKey1は自分でも思いつきそうですが,それ以外の書き方はすごいなぁと思います。
Main> findKey4 "wendy" phoneBook [Nothing,Nothing,Nothing,Nothing,Nothing,Just "939-82822",Just "939-82822"]