なぜ関数型言語は普及しないか

言語を利用するための条件は以下の3つになると思う。つまり、言語が普及するための条件とも考えられる。

  • 使用するための必要条件を満たしているか
  • その言語を使用するメリットがあるか
  • デメリットはないか


例えば、D言語はシステム言語であるので、使用するための条件は、パフォーマンス、ライブラリの充実度などだと思う。そして、メリットは、簡単でパフォーマンスが良いことだと思う。D言語がいまいち普及していないのは、恐らくライブラリの充実度に問題があるのと、言語仕様が難しすぎるというデメリットのためではないか?


同じく関数型言語が普及していないのは、プログラムに慣れるまで時間がかかるというデメリットがあるのに対して、メリットがないからだと思う。


あと、まず関数型言語をもう少し普及させるには、手続き型言語のプログラムを1対1で関数型言語のプログラムに置き換えるための知識が必要となる。forループは、以下のように置き換える。使い分けは、自前のループが必要な場合のみ(b)を使用する。

構造を持つデータの各要素に対して処理をしたい場合には、(a)その構造全体を一気に処理できる関数(例:map, fold等)を使うか、(b)その構造を「頭」と「残り」に分解し、「頭」を処理して、「残り」は自分自身を再帰で呼んで処理させ、最後に結果を合成します。

(http://q.hatena.ne.jp/1143714236からの引用)

これは分かるが、私が分からないのは、ループの中で、複数の文(ブロック)を実行する場合、どうするのかということ。つまり、ブロックをどうやって置き換えるのかということ。それが分かれば、とりあえず関数型に1対1で置き換えられそうな気がする。とりあえず、動くプログラムが書ければ、その言語らしい書き方にしていくには、あとは慣れの問題だと思う。