Real World Haskell(無事配達完了)

年内に届くかどうかやきもきしていたが、本日配達され無事受け取ることができた。

まだざっと目を通したところだが、Haskellの一通りの特徴を押さえているのはもちろんだが、Real Worldの名に恥じないだけのコードサンプルが用意されているのが良いね。
ざっと挙げただけでも、

  • 一般的なファイルI/O(をどうやってHaskellで料理するか)
  • 外部Cライブラリのバインディングの作成(本書ではPCREを例に解説)
  • GUIプログラミング(gtk2hsでGTK+ & Gladeでのアプリケーション開発)
  • SQLベースのデータベースアクセス
  • スレッドプログラミング
  • ランタイムシステムによるコードプロファイル/カバレッジ
  • ネットワークプログラミング(これはほんのちょっとって感じ)

など、純粋関数型言語でどうやって従来の手続き型言語でやっていたことが達成できるか結構詳細に解説されている。また、コード例を通してHaskellに特徴的なモナドによる様々な計算合成の仕組みの解説も丹念にされている。

なお、本書で採用している言語系はGHC(6.8.3)なので、Hugs向けにはちょっと不向きな所もあるかも。

Haskell関連の書籍はまだまだ少ないと思うが、本書は洋書・邦書の中でもかなりお勧めできる内容・質を備えていると思う。

ちなみに邦書でお手軽入門向きには

がお勧めかな。

とりあえず、Haskellでちょっとしたファイル処理なんかを実装するために、必要最低限の構文・関数について解説するところから、最後のほうではWikiシステムの開発など今時の言語系できることはHaskellでもできるんだぜぃってのりが、肩肘張ってなくてなかなか好印象。
リファレンスとするにはちょっともの足りないけど、そういうものは今時Web上にもいっぱい転がっているのでまずはこれからという点では悪くない。

警察の巡回調査

本日、警察職員の人がやって来て巡回調査ということで、住所、氏名、連絡先などを聴かれ調査票に記入した。
周辺で空き巣被害などが多発しているということで、定期的にアパート・マンションを戸別訪問してこのような調査をしているらしい。あわせて防犯上の注意などを説明された。

が、身分証を確認するのをうっかり忘れたので、念の為最寄の警察署に連絡し調査員の人からコールバックをしてもらって、調査が実際に警察で行われているものであることが確認できた。

防犯対策としてやってもらっていることなので本来はありがたいことなのだが、一歩間違えると振り込め詐欺のネタを提供していたかもしれず、結構冷や汗ものだった。
身分証を確認していたとしてもそれが本物かどうかもすぐには判別できないし(名前と所属を控えておけば後で確認はとれるだろうけど)、このような調査って実は不安感を高める効果の方が強いかも。それが防犯にはいいのかもしれないが。

一昔前ならご苦労様の一言で済ませられていたたことなのに、今時はここまで注意をしなければいけないご時勢なんだなぁということを実感させられた。

Haskell::OGR-nの探索

GR-nの生成もそろそろ飽きてきたので、OGR-nの探索問題について考えてみる。

まず、GR-nは無限列なのでそのままでは、終了条件を決めることができない。
そこで、探索範囲を有限領域に抑え込むために次の戦略を考える

  • まずGR-nの先頭いくつか(今回はn*2個)をサンプルとして計算し、その内最短のものを求め長さをmとする
  • PGR(n-1,m-1)とn(n-1)/2~mの組み合わせから、PGR(n,m)を計算する。ここで、PGR(n,m)はGR-nの内長さはm以下のものの集合でGR-nの定義よりこれは有限集合である。
  • PGR(n-1,m-1)はPGR(n-2,m-2)以下より再帰的に計算可能
  • PGR(n,m)からOGR-nを探索する

以上から、まず第一弾のコードを書いてみた。90行程度になったのでさすがに別リンクで。

ogr.hs

このコードでOGR-8までは一応一分以内に計算できる。
OGR-9になると途端に2時間以上かかる。

PGR(n,m)を計算する過程でm'<mなるm’が見つかった時点で一旦全ての計算をキャンセルして、m’を新しいmとして計算し直した方が全体の計算量を減らせそうな気がする。
まだ、Haskellの例外処理はさっぱり理解できていないので、この手法の実装はまたいずれということで。