プログラミング Haskell 第9章 対話プログラム その3

今日はライフゲームの実装です。解説はそんなになくてサンプルコードが淡々と出てくるのですが、かなりあっさりとできてしまうという感じです。おそらくライフゲームという題材が関数型プログラミングには向いている(1つ前の状態から次の状態が計算できる)のと、細かいところを妥協している(wait するところはもっといい方法があるはずだし、端末の制御もエスケープシーケンスを直接出力している)からだとは思います。しかしそれでも関数を組み上げていくスタイルはシンプルに記述できるなと感じました。

  • seqn のように「IO アクションを引数に取って IO アクションを返す関数(合成する関数)」が便利だなと思いました。do 記法を関数に閉じ込めているだけなのですが理解しやすいと思います。
  • liveneighbs はポイントフリースタイルになっていて読み下すのに少し時間がかかった
  • life はセルの描画後にカーソルが最後のセルの次の位置のままになるので、wait する前に goto (1,1) で左上に戻すようにしてみた

第9章の本文はこれで読み終わりました。また練習問題にとりかかろうと思います。