あどけない話

インターネットに関する技術的な話など

[OCaml]書評「プログラミングの基礎」

僕はよく「関数プログラミングの入門書には何がいいか」という質問を受ける。そのときは必ずこの本(と他のいくつか)を答えるようにしている。書評を書いたつもりになっていが、検索してみると書いてないようなので、反省して良書を紹介してみようと思う。

プログラミングの基礎 ((Computer Science Library))

プログラミングの基礎 ((Computer Science Library))

本書はプログラミングの経験のない人を対象としており、書名通りプログラミングの基礎が説明されている。使用する言語は OCaml である。著者の浅井先生は、お茶の水女子大学でプログラミングを教えている。授業の経験を元にした本にはよくあることだが、内容が実に整然としており、例題がこなれている。

初心者を対象としているだけに「構文エラーとは何か」といった基礎的な話題から始まる。なんと言っても本書を特徴付けるのはデザインレシピである。プログラミングをしたことない人が何を書いてよいのか迷わないように、構文や考え方ごとにデザインレシピが用意されている。読んでいくと、手取り足取り教えてくれる講習を受けている感じなのだ。

一冊を通じて実装して行くのは、メトロネットワークの最短経路問題を解くプログラムである。その過程で探索が必要となる。アルゴリズムを教える際の王道ではあるが、最初はリストの線形探索から始まって、二分木の探索、そして平衡二分木(赤黒木)の探索と、順を追って解説されている。命令型言語の入門書では出てこないようなアルゴリズムにまで踏み込めるのは、関数型言語を使った入門書ならではだろう。

エラー処理に関しても直和型(option)と例外の使い分けが解説されている。僕自身は関数プログラミングを学んだ際に、長い間この辺りが分からなかったので、実によく書けていると感心した。

本書では、当たり前のように関数プログラミングを教えて行くので、逐次実行や破壊的代入が出て来るのは第21章以降である。つまり純粋な関数だけでも、かなり本格的なプログラムは書けることが自然とわかるような構成になっている。

僕もこの本でプログラミングを学んでいれば、遠回りにはしなかったのになぁと思う。

あえて欠点を挙げるとすれば、

  • 関数の型注釈をコメントに書くので機械的な検査の対象にならないこと
  • 書名にOCamlという文字列が入ってないこと

ぐらいだろうか。前者は、mli ファイルに型を書けるのだけれど、複数のファイルを使うと初心者が混乱するので避けるという方針らしい。後者は、たとえば「OCamlで学ぶプログラミングの基礎」という書名であったら、関数プログラミングを学びたいと思っている人のアンテナにひっかかったのになぁと残念に思う。

ひとことでまとめるなら、本書は素晴らしい。どんなプログラマにも、初心者にも、お薦めできる一冊である。