酔眼漂流読書日記

本と音楽と酒場と言葉

Haskell: The Craft of Functional Programming

Simon Thompson (ASIN:0201342758)
関数プログラミング言語 Haskellを使った関数プログラミングの教科書。簡単な例題から始めて高度な内容までを丁寧に解説しています。
関数プログラミングの面白さの一つは、プログラムの「目的」(仕様とも言う)を、普通の手続き型言語に比べて、より直接的に表現できるというところです。たとえば良く使われる例ですが、クイックソートのプログラムは Haskell では


qsort [ ] = [ ]
qsort (x:xs) = qsort [y|y<-xs, y<=x] ++ [x] ++ qsort [y|y<-xs, y>x]
と書くことができます。ここでは再帰を使ってうまくクイックソートを定義しているわけですが、クイックソートアルゴリズムをご存知なら確かにこれだけの記述でプログラムが完成していることがおわかりでしょう。アルゴリズムそのもののお勉強などには、うってつけの言語といえるでしょう。
これが例えば C で書かれたとすると(http://www.haskell.org/aboutHaskell.html より引用)

qsort( a, lo, hi ) int a[], hi, lo;
{
int h, l, p, t;

if (lo < hi) {
l = lo;
h = hi;
p = a[hi];

do {
while ( (l < h) && (a[l] <= p) )
l = l+1;
while ( (h > l) && (a[h] >= p) )
h = h-1;
if (l < h) {
t = a[l];
a[l] = a[h];
a[h] = t;
}
} while (l < h);

t = a[l];
a[l] = a[hi];
a[hi] = t;

qsort( a, lo, l-1 );
qsort( a, l+1, hi );
}
}

といった感じになるのですから、記述力の違いは際立っていますね。
Haskell を学習に用いるなら Hugs という無償のインタープリタがお勧めです。