yashigani?.days

週刊少年ジャンプについてだらだら書きます

すごいH本読書会#3に参加した

今回の範囲は5章の「高階関数」で,発表者は@さん.資料はこちら

感想など

今回の範囲はではカリー化,ラムダ,畳み込み,$関数,関数合成,ポイントフリースタイルとかなりHaskellっぽい感じになってきた.特に無限リストでもfoldrできるしくみが興味深かったし,訳者の方などHaskellハッカーの方が参加されていて,出た疑問にその場で回答していただけてすごく豪華な感じでよかった.

次回からは練習問題を発表者が用意するスタイルから,各々が問題を考えてくる制度になった.

練習問題の回答

それぞれ考え方を書いていくと

問1

オーソドックスに$でつなげただけ.最初は

filter odd $ map (^2) [1..5]

と回答してたけど,リスト内包表記の表現的にmapよりfilterを先に適用したほうがニュアンスが正しいかな,と思って直した.

問2

takeWhileは最初foldrを使って書いてたけど,無限リスト入れたら終わらなくなってしまったので,パターンマッチに書き直した.場合分けをif式でやってるのがなんかださいと思っている.

問3

今気づいたけど,畳み込み使って解けって問題だった...あとでやり直す.

問4

$でつなげりゃいいんだろーと思いながら適当に書いたら,あたらなかったのでインタプリタと戯れた結果できた.引数を適用する関数を作るってのがポイントだな.

問5

コラッツ数の数列を作るのは本にあったものをそのまま使った.解法としては,とりあえず数と数列長のタプルにしてやって,あとは単純に一番大きい値を探してるだけ.パターンマッチ便利だと思った.とくにasパターン.実行に5分くらいかかる.

ふりかえり

場合分けをif式でやってるのがなんかださい気がする.anyはたしか最初はfoldrで書いてたけど,foldrだと途中でやめられないって思ってパターンマッチと再帰で書くことにしたんだと思う.けど今回やった内容をふりかえると普通にfoldrで書けると思う.あとでやる.ついでに#2の練習問題もやっておこう.

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!