デバッガはないのかね
Haskell は関数の処理が高級だから、本当にタイプは少なくてすむと思う。だから、やりたいことの方法さえわかっていれば、本当にコードを組むのは早いと思うよ。
Haskell と C のクイックソートをそれぞれ見てみようか。
これが Haskell。わずか 2 行。
qsort [] = [] qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
こっちは C。行数はがんばって減らしてるほうだけど、結構多いよね。
void qsort(int a[], int lo, int hi) { 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 ); } }
こうやって比べると、C より Haskell の方がすごく有利な気がするんだけど、今の僕じゃ Haskell の 2 行目が自分の脳みそから搾り出せないから、僕の場合 C の方が早いんだ。
でも、コードの量なんてものはプログラミングでは些細なことで、もっともっと大切で重要で大事なものは、デバッグ環境だと僕の経験は語っている。
プログラミングでもっとも時間がかかるのは、実はデバッグでしょ?
Haskell の場合、デバッガがないので、いや、ステップ実行なんてことは Haskell の言語仕様ではできないので、デバッガなんてあり得ないのかな、とにかく、ないので、原始的なやり方をせざるを得ないんだけど、それすらわからんので始末に困る。