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の定義のほうが遥かに簡素だが、
クイックソートの実装においてそこまでの断裂があるわけではなかろう。