関数型言語Part3
■ このスレッドは過去ログ倉庫に格納されています
0186デフォルトの名無しさん
NGNGhttp://www-6.ibm.com/jp/developerworks/linux/010615/j_l-prog.html
個人的には、大まかに言って、関数プログラミングとは、
以下の特性のうちの少なくともいくつかを備えたものであると考えています。
関数言語と呼ばれる言語は、以下のことを行いやすくし、 その他のことを困難または不可能にします。
1. 関数が最初のクラス (オブジェクト) である。
つまり、「データ」について行えることはすべて、
関数自体についても (関数を別の関数に渡すなどの方法で) 行うことができます。
2. 主要な制御構造として再帰が使用される。
言語によっては、それ以外の「ループ」構成は存在しないことがあります。
3. リスト処理に主眼が置かれている (たとえば、Lisp という名前にもこれが表れています)。
多くの場合、ループに代えて、リストがサブリストの再帰とともに使用されます。
4. 「純粋な」関数言語は副次作用を避ける。
これにより、最初にある値を変数に割り当て、
次に同じ変数に別の値を割り当ててプログラム状態を追跡するという、
命令型言語に付き物と思われるパターンが除外されます。
5. FPはステートメント の使用を思いとどまらせるか、あるいは完全に拒絶し、
代わりに式 (つまり、関数に引数を加えたもの) の評価を行います。
純粋な場合、1つのプログラムは1つの式 (およびそれをサポートする定義) になります。
6. FPは、どのように 計算するのかということよりも、 何を 計算するのかということを気にします。
7. 多くのFPは「高階」関数 (つまり、関数を操作する関数を、操作する関数) を利用します。
■ このスレッドは過去ログ倉庫に格納されています