2016-02-11 すごい Haskell たのしく学ぼう ! の 5 章を写経した
すごい Haskell たのしく学ぼう ! の 5 章を写経した。
今週の目標には「すごい Haskell たのしく学ぼう ! の写経を終わらせる」ことがある。その達成のためだ。
今日は建国記念の日でお休みなので、それを利用して一気に進めようとした。しかし、今日一日で 5 章の 1 章分しか進まなかったので、全部で 15 章まであるすごい Haskell たのしく学ぼう ! を今週で終えられそうにない。
5 章は高階関数。「高階関数」・「カリー化」・「ラムダ式」・「 map 」・「 filter 」・「 foldl/r 」・「 $ 」・ 「関数合成 (.) 」 ・「ポイントフリースタイル」。
Haskell の関数の結合の規則や currying など C 系の Java / JavaScript とは随分と違っている。たとえば f g 1
は、 CoffeeScript では f(g(1))
だけど、 Haskell では ((f g) 1)
になる。Java では error になりそうな f g
も部分適用として扱われ、自動で currying されているので、次の引数を取る関数が返される。あとは $
と .
を使って、括弧を減らし簡潔にできるあたりも良い。
個人的に記録しておきたい点は「 foldr で無限リストを扱える」こと。Haskell が遅延評価であるために次のような記述が動く。
ghci> let and' = foldr (&&) True
ghci> and' $ repeat False