Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事にトラックバックする(FC2ブログユーザー)
http://exphenomenologist.blog100.fc2.com/tb.php/470-05afeef8

トラックバック

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

ミラン・リポヴァチャ『すごいHaskellたのしく学ぼう!』

すごいHaskellたのしく学ぼう!すごいHaskellたのしく学ぼう!
(2012/05/23)
Miran Lipovača

商品詳細を見る

関数型プログラミング言語について何か読んでみようと思って手に取った。これはHaskellの入門書で、文体もとてもポップだし、不思議なイラストがたくさん出てくる。理解のしやすさはまあまあだろう。個人的には型クラスについてもう少し説明してくれればよかった。

関数型言語なので何度呼び出そうがまったく同じ答えが返る。手続き型言語ならその実行時の状態で変数の中身はどうなってるか分からないので、戻り値は同じとは限らない。Haskellのデータ構造はimmutableで、何も変えることはできない(p.363,378)。

また、Haskellは遅延評価であり、関数の評価は実際にそれが呼び出されたときに、呼び出された限りで行われる。だからHaskellでは無限リストを使うことができる(p.14)。これはなかなか面白い。

Haskellを使うポイント、また本書が力点を置いているポイントは間違いなくモナドについてだ。ファンクター、モノイド、モナドといった概念をすでに圏論のほうで学んでいる自分にはそれなりに馴染みのあるものなので面白く読むことができた。本書ではモナドは、ファンクターの強化版としてのアプリカティブファンクター、さらにその強化版としてのモナドという形で導入される。強化版とはサブクラスということ。

モナドとは「文脈付きの」値を扱うことだ、という解説はなるほどと思った。本書がよく使うMaybeは「値が失敗している(Nothingである)かもしれない」というものだし、Writerは値にログが付属しているもの。この文脈を剥ぎ取るという計算が、圏論でいうforgetful functorに当たるのだろう。

モナドの話で出てくる、リストとは非決定な値の集まり、値の重ねあわせだという話も興味を惹かれる(p.301ff)。例えば整数のリスト[1,2,3]は値が1か2か3のどれかだという非決定性を表すもので、モナドを用いることはこうしたリストに対して非決定なまま計算を行うことだ。なにより、包括原理を用いた、記述による集合の指定を行うことはモナドを使って計算を行なっているということだ、すなわちリストとしての領域に対して非決定的な計算、この場合は条件による値の分出を用いて結果として再びリスト=非決定的な値の集合を行うことだという話(p.304f)は目からウロコが落ちるものだった。

確かにモナドは面白いけど、関数型言語ゆえ普通に考えれば値がその都度変わる可能性のある状況--ファイルやDB、画面のI/Oや、ステータス管理など--はややこしい。業務用アプリを関数型言語で作る気になるかと言われれば、ならないだろうな。コンパイラとかでは実装されている例もあるらしいが。
スポンサーサイト
この記事にトラックバックする(FC2ブログユーザー)
http://exphenomenologist.blog100.fc2.com/tb.php/470-05afeef8

トラックバック

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。