

とても面白い本だ。読んでいてワクワクするような本を久々に読んだ。タイトルは『プログラミングの基礎』だが、これはプログラミングについて多少とも学問的に学んでみたいという学生向けの本。仕事でプログラミングをすることになった人が基礎を知りたくて読むものではない。何と言っても扱われているプログラミング言語はOCaml。むしろ、「関数型プログラミング入門」のようなタイトルが良いかもしれない。
とはいえ、OCamlが採用されているのは関数型プログラミング言語の入門を目指しているからではない。プログラムを動かすための決まり事が少なくて、プログラミングそのものにすぐ入り集中できるからだ。確かにJavaでやろうとすると、importもいるしmain関数の扱いがあるし、さらには型についても学ばないと動かすことができない。OCamlの対話型インタプリタならすぐに動かせる(この点だけなら例えばRubyでもよいかと思う)。またOCamlは型チェックがかなり厳密で、多少の記述ミスがすぐに分かる。加法演算子+でさえ、int型を引数に取る通常の+と、float型を引数に取る+.(ドット付き)の二つがある。
本書は、OCamlを使って関数型プログラミングの基礎を学んでいく。しかも最短経路問題をダイクストラ法で解くプログラムを作りながら進む。ダイクストラのアルゴリズムも解説されていて、これはこれで興味を持つ人も多いだろう。こうした実際のプログラムを作りながら、本書はOCamlの高度な部分まで解説している。再帰や高階関数は当たり前のこと、再帰処理でもその停止性の問題、OCamlのオブジェクト指向の考えとモジュール、例外処理、参照透過性、副作用を使ったプログラミング、などなど。データ型でもリスト、二分木、赤黒木(バランス木)、ヒープなどが出てくる。確かにこれらをきちんと学べば、著者の言うようにすでに上級者(p.264)だろう。情報処理専攻の大学2年生向けの授業を基にした本なのだが、ここまで学んでいるのに少し驚いた。
おそらく知識がついた後に読み直すとそういうことだったのかと思うような箇所も多く、示唆が散りばめられている。発展した話題がその名を出さずに触れられている。例えば関数のカリー化と部分適用(p.132)があるし、関数型プログラミング言語で最高に面白いモナドにつながるオプション型を用いたところ、さらには大域ジャンプ(p.208)の話まで出てきている。
また、関数型プログラミング言語の話を離れたところでは、まずデザインレシピを作れと書かれている(p.26-31)。これは関数の中身を書く前に、まずその戻り値として仮の値を書いておき、そしてテスト(assert文のようなもの)を書いておく。つまりテストドリブンの開発となっている。テストを最終的に消すのは出荷前だ(p.164f)。
関数型プログラミング言語をしっかり学びたいなら、この一冊。実に楽しい。
スポンサーサイト
- https://exphenomenologist.blog.fc2.com/tb.php/607-ff21b454
トラックバック
コメントの投稿