第3回「ふつうのHaskell読書会」@CSNAGOYA 開催しました。
4月13日に名古屋の芸術創造センターにて「ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門」の読書会を行いました。前回に続き雨の中、8人の人に集まっていただきました。
内容
今回は4章と、5章を勉強しました。以下印象に残った点のまとめです。
第4章 Haskellの基礎(3) モジュールと総合演習
- Haskellプログラムはモジュールという単位に分割されている
- 関数や変数は必ずなんらかのモジュールに所属する
- mainはMainモジュール、Mainは省略が可能
- 基本的な型や関数はPlreludeモジュールで定義。自動でインポートされる
- ある式だけに有効な定義を導入するときはwhereを使う
- whereで定義された関数は外の関数の引数を参照できる(逆はできない)
第5章 遅延評価
- 関数の適用を定義で置き換えることを簡約という
- 簡約には最内簡約と最外簡約がある(Javaとかは最内簡約)
- 遅延評価を行う言語は少ない(遅延評価 -wikipedia)
- 引数を一度だけ評価する、グラフ簡約という方法が採用されている
- データ構造も遅延評価だから、無限リストをあつかうときも必要なだけしか評価しない
- Haskellは参照透明
- 参照透明を貫くのはむり->そのためにモナドがある
- 副作用ってのは、式の値以外の結果のこと(出力とか)
遅延評価の利点
- 不要な計算を減らせる(必要な計算しかしないから)
- 無限の長さのリストが扱える(自然につかえちゃう!)
- インターフェイスが統一できる(全部リストであつかえる)
遅延評価の欠点
- 思った順番で操作を実行するのが難しい
- デバックしにくい
まとめ
まず、僕は関数型言語というのは遅延評価をするものだと思っていたので、Haskell特有のものだと知って驚きました。また、無限リストを扱えるということがどういうことなのかが今回の勉強でわかりHaskell勉強会の目的をまたひとつ達成できました。
教材について
これは「ふつうのHaskell」の話になりますが、著者である青木さんの説明はちょうど僕レベルの人間にぴったりなようで、読んでいくうちに「あれ?これって高階関数じゃね?」とか「え!もしかしてこれが遅延評価か!」と自分で発見させてくれるような書き方になっていて、読んでいるだけでとてもうれしい気持ちにさせてくれます。もともと日本語でのHaskellの入門書というのはこの本以外には「入門Haskell―はじめて学ぶ関数型言語」というのしかなくて、両方とも良書という評価にはなっているんですが。先に読み始めたのがこっちの本で本当によかったなと思いました。
おまけ
本書に出てきた「たらいまわし関数」というのをみんなでいろんな言語で実装してみました。
投稿があり次第追加していきたいと思います。
対決!たらいまわし関数 -csnagoya

