2014年1月19日日曜日

[OCaml][Book]プログラミングの基礎 読了

プログラミングの基礎 (Computer Science Library) を読んだ。
SICPに関連するブログ徘徊していたら、あちこちでお勧めされていた書籍。
冬休み+αを利用して、一通り演習問題を解きつつ、読了。

最近読んだプログラミングの本の中では、一番楽しかった。
本書をきちんと読んでいれば、演習問題も簡単で、すいすい読み進める。
もっと早くこの本を読んでおけば良かった。

本書では、一冊を通して、メトロネットワーク最短経路問題を解くプログラムを作り、
その過程で、以下の内容が学べる(目次から抜粋)。
  • 基本的なデータ
  • 変数
  • 関数
  • 条件分岐
  • エラー
  • パターンマッチ
  • レコード
  • リスト
  • 再帰処理
  • ダイクストラのアルゴリズム(最短経路を求めるためのアルゴリズム)
  • 高階関数
  • 再帰の停止性の判定
  • 再帰的なデータ構造
  • 例外処理
  • モジュール
  • 逐次実行
  • 参照透過性
  • 副作用
使用言語は関数型言語であるOCamlを使う。
対象はプログラミングをしたことがない人向けということであるが、関数型言語を使ったことがない、知らないという人にもお勧め。
使用言語はOCamlであるが、HaskellやScalaでも役立つような、関数型言語での普遍的な内容を学べる。

関数型言語を始めたばかりだと、副作用がない処理を、どのように組み合せて実装するのか、良く分からないが、本書を順番に読み進めていくと、特に関数型をいうことを意識しなくても自然に実装できるようになってくる。
実際に、副作用については、本書の最後の方まで出てこない。
副作用がある処理は一切考えなくても、普通に処理を実装することが理解できる。

感想は以下の通り。
  • 副作用がない処理の実装に慣れてくると、副作用がある処理は不自然に感じてくる。
  • 強力な型チェックは、バグを減らすためにとても便利。
  • 再帰は自然な処理だ。
  • 関数型言語では、Howを実装するのではなく、Whatを実装する。
  • OCaml楽しい!

OCamlはHaskellと比べると、少し洗練さ足りない(泥臭い)感じがするのだけど、楽しく感じてしまう。何故なんだろう。
気に入ったので、OCamlで、いろいろプログラムを書いてみよう。