関数型プログラミング



関数型プログラミングについて

関数型プログラミングとは

関数型プログラミングとは、関数に引数を作用(applicate)させて計算を行うプログラミングです。

「関数」とは、数学における「関数」であり、手続き型プログラミングなどにおける「関数」ではありません。

数学的な関数とは、ある入力値が決まると出力値が一意に決まるという特徴があります。


関数型プログラミングは、中間結果を保管する一時変数を使用せずに、プログラムへの入力に対して実行される操作のみを記述します。

関数は同じ入力値に対して常に同じ出力値が返し、同じ入力に対して異なる出力をするような内部状態を持たないようにします。


関数型プログラミング言語では、関数を機能の単位として、関数の組合わせることで機能を記述していきます。

可能なかぎり状態の変更を避け、関数どうしの間を流れるデータだけを扱うようにします。


参照透過性(referential transparency)

参照透過性とは、同じ引数を与えられると必ず同じ値を返すという特徴をいいます。

参照透過性が高いとは、関数がどこでいつ呼び出されようと、入力が同じであれば、常に得られる結果が同じになる、ということを意味します。

つまり、関数の評価結果が状態変化の副作用に左右されることが少ないということです。


副作用について

副作用とは、プログラムの内部状態が変更されたり、返り値に現れない変更が行われることをいいます。

具体的には、破壊的代入(変数の書き換え)などが挙げられます。


副作用をなくすということは、プログラムの実行中に順次変化していくデータ構造を持たず(変数は一度値を与えられたら変更されない)、各関数の出力はその入力にしか影響を受けないということです。

なお、副作用のまったくない関数は「純粋関数型」であるとされます。


非純粋関数型言語と純粋関数型言語

非純粋関数型言語とは、書き換え可能な変数など副作用のある機能も一部合わせ持っている言語です。

LISPやScheme、ML、OCaml、Scalaなどが非純粋関数型言語として挙げられます。

副作用を一切排除した言語は純粋関数型言語は呼ばれ、Haskellなどが挙げられます。


高階関数(higher order function)

高階関数とは、関数値を引数にとったり戻り値として返したりすることができる関数のことをいいます。

関数をオブジェクトとして扱い、値と同じように変数に代入したり、関数の引数として渡したり、戻り値として返したりすることができます。



関連ページ



スポンサード リンク