Haskell でソート

Haskell を学習し始めた頃、学習の一環として色々なソートを実装していたのを思い出した。そのときと比べて今はどうなのか、ちょっと試したくなりましたので、再び実装してみた。

現代版のコード (gist)

比較した感想

バブルソート

パターンマッチを有効に利用できている。前は head, tail, last を使って苦労していた。

マージソート

やっていることはほぼ同じだった。余分なパターンマッチが一つなくなっているくらいで、そう大差はない。書き方は今の方がスッキリしていると思う。

選択ソート

あ、やばい。前の方がいい。delete という関数をどこで知ったんだろう。いつ忘れたんだろう。その存在を知っていれば、もっと楽に書けたのに...

挿入ソート

これは明らかに今回の方がいい。前のは全然やり方がわからなかったから、クイックソートアルゴリズムをどうにかして、答えを導こうとしていたのだろうか。そんな感じがする。このことは畳込みは知らなかったので、そのあたりの差も出たかな。

まとめ

3対1で今回書いたコードの方がよかった。まあ、成長していないとマズイもんね。

ただ選択ソートは前の方がよかった。原因を考えてみると、今はある程度Haskellに関して知っているので、その知っている範囲での関数だったり記法でどうにかしようとしていたと思う。逆に前回は知識が少ないので、どうすれば実現できるのだろうか模索し、色々調べたのであの様になったのだろう。

調べずに今わかる範囲で書くのか、もっといい方法があるのではないかと思い調べながら書く、その違いが原因ではないだろうか。