Haskell を何に使うか

Haskell は入出力関係のプログラミングがやや面倒だ。副作用のある入出力のプログラムを無理に関数型のプログラミング言語に取り入れようとしたために、プログラムがやや煩雑になっているような気がする。プログラムを実務に役立てようと思ってHaskellを勉強し始めた人が、これは役に立たないと判断しても無理はない。

しかし、Haskellの本領はデータの入出力ではなく、アルゴリズムをそのまま記述できると言うところにある。たとえば、'a', 'b', 'c' という3文字の順列はどういうものがあるのか知りたいとしよう。こういうときに、ファイルからの読み込みや、書き込みのプログラムは必要ではない。ただ、この3文字の配列を知りたいだけだからだ。そういうときに Haskell でプログラムすると次のようになる。

import List

permutation [] = [[]]
permutation xs = concat [map (x:) $ permutation (delete x xs) | x <- xs]

実行例
Main> permutation ['a', 'b', 'c']
["abc","acb","bac","bca","cab","cba"]

このプログラムには入出力のプログラムはまったく必要ない。ただ、3文字の配列がどうなるかを見てみたかっただけだからだ。また、このプログラムも自分で考える必要はなく、「Haskell 順列」でグーグル検索すればそう時間もかけずに探し当てることができる。

頻繁に入出力を要するプログラムは、Haskell ではなくて他の手続き型のプログラム言語で書いた方がストレスが少ないだろう。しかし、アイディアをちょっとパソコンで検証してみたいという使い方には Haskell は非常に便利だ。手続き型か関数型かという全か無かの発想ではなく、Haskell の特徴を生かすような学びかたをすれば、学習する労力とメリットのバランスが十分にとれるような気がする。

入出力についても慣れの問題で、関数がIOモナドを返すように注意してさえおけば、そう違和感なく手続き型のプログラムを組むことができる。入出力をあまり要しないプログラムでHaskellのプログラムの癖に慣れてから、入出力プログラムに取り組めばよい。

とにかく、Haskell は思っていたように難しくもなく、特殊な用途にしか使えないわけでもない。普通に使うことができ、かつ、ストレスの少ない汎用言語なのだ。
[PR]
by tnomura9 | 2009-08-23 23:54 | Haskell | Comments(0)
<< 平均 分散 標準偏差 Prelude の標準関数 索引 >>