About Haskell について。

久しぶりにこのページをみた。
Haskellの利点として短いクイックソートが例に挙げられていた。
昔はふむふむと読んでいたのだが、今読んでみると
若干の違和感を感じた。
それというのは、Cで書かれたクイックソートのほうだ。
たしかに例に挙げられているCでのクイックソートは長くて分かりにくい。
ちょっとした不注意でバグを盛り込んでしまうだろう。


だから、多分今私が確実に動作するクイックソートを短時間でC++で作れ、
といわれたらきっと次のようなコードを作成する。

void qsort(vector<int> &v)
{
  if (v.size()==0) return;
  vector<int> low,high;
  int t=v[0];
  for (int i=1;i<v.size();i++){
    if (v[i]<t) low.push_back(v[i]);
    else high.push_back(v[i]);
  }
  qsort(low);
  qsort(high);
  int c=0;
  for (int i=0;i<low.size();i++) v[c++]=low[i];
  v[c++]=t;
  for (int i=0;i<high.size();i++) v[c++]=high[i];
}

実際のところこのコードはすぐにかけたし、間違いもしなかった。
というのも、このコードはHaskellのものと本質的に変わるところがなく、
間違える余地もほとんどないからである。


そういうわけで、クイックソートを引き合いにして
Haskellの有利性を説くのはいかがなものかと思った。
もちろん、Haskellの定義のほうが遥かに簡素だが、
クイックソートの実装においてそこまでの断裂があるわけではなかろう。