プログラミング好きの備忘録

関数型言語とか、証明とか

すごいH写経:6章

8/30にやったことまとめ。執筆しているのは8/31なのですが、記事の日にちと一日ずれるのはどうかと思ったので昨日の日付で投稿します。

やったこと:すごいH本、6章写経(~P102,章の2/3くらいまで)
意外と進まなかったという印象。覚えたことやひっかかったところをメモしておきますね



Data.Listモジュール

nub :: (Eq a) => [a] -> [a]
リストから重複する要素を取り除く関数

gourp :: (Eq a) => [a] -> a
リスト内で、隣接する同一要素をリストでまとめる関数

isInfixOf :: (Eq a) => [a] -> [a] -> Bool
a `isInfixOf` b は、aがbの先頭に含まれているかを判定してBoolを返す

find :: (a -> Bool) -> [a] -> Maybe a
find p lst はリストの中でpがtrueになる最初の要素をMaybeに包んで返す。
見つからなかったらNothingが返る


Data.Charモジュール

digitToInt :: Char -> Int
'0'から'9','A'から'F','a'から'f'の文字を数字に変換する。
ASCIIコードを返すわけではないので注意。


わからなかったこと(P102)
findKey :: (Eq k) => k -> [(k,v)] -> Maybe v
findKey key xs = foldr (\(k,v) acc -> if key==k then Just v else acc) Nothing xs

再帰より畳み込みのほうが読み易く理解しやすい(誰が見ても畳み込みだと分かる)とのことなのですが、何をどう畳み込んでいるのかよくわかっていません。
Nothingでひっかかっているのか、そうではないのか。改めて考えます。