第3回 スタートHaskell 感想

今回はニフティで開催。大森駅には初めて降りた。住宅街とオフィス街が混ざったような雰囲気だった。

発表

極意

バグの入り込みにくい小さな関数をつなげて、大きな関数を作る。

速度

length は遅い。あと rverse も。配列をすべて走査しないといけないから。途中で打ち切れない。

再帰

「一つ前ができていたら、次はどうする?」(c) 和田先生.

畳み込み

foldr は末尾再帰でない再帰。遅延評価と相性がいい。リストを生成する関数と相性がいい。
foldl は末尾再帰。数値を生成する関数と相性がいい。
and や or を 畳み込みを使って実装する場合は、リストを生成する関数ではないが foldr の方がいい。

and' :: [Bool] -> Bool
and' = foldr (&&) True

and の場合 (&&) の定義が

True  && x = x
False && _ = False

となっているため、途中で False が見つかればそこで処理を打ち切れる。末尾再帰を使うと以下のようなコードの場合、返ってこない。

and $ map (<= 10) [1..]

演習

型(Kata)の練習。3時間は長いな〜と思ったけど、あっという間だった。
虎さんが用意してくださった演習はとてもやりやすかった。いつもありがとうございます。