「関数型言語」の版間の差分

編集の要約なし
{{独自研究|date=2014年4月}}
{{プログラミング言語|index=かんすうかたけんこ}}
[[ファイル:Orange lambda.svg|境界|右|フレームなし|209x209ピクセル167x167px|代替文=]]
'''関数型プログラミング'''(かんすうがたプログラミング、{{lang-en-short|''functional programming''}})は、[[プログラミングパラダイム]]の一つであり、[[ソフトウェア工学]]における主にプログラムリスト作成とコード記述の分野で用いられる考え方である。一説には[[数理論理学]]の[[ラムダ計算]]をモデルにして考案されたと言われる。
 
プログラムの基本要素である値(''value'')を限りなく抽象化して、入力と出力の同時表現体すると共にその変換式も併せ持たせたものが、ターム的に'''関数'''(''function'')と定義されている。関数は同時に入力の引数と出力の関数参照にもなるので演算の連鎖が可能であり、この仕組みの能動側は'''[[高階関数]]'''(''high-order'')、受動側は'''[[第一級関数]]'''(''first-class'')と呼ばれている。変換式はプログラムデータに一切の影響を与えず、また一切の影響を受けない事が保証されており、この原則は'''[[参照透過性]]'''(''referential transparency'')と定義され、仕組み的には'''純粋関数'''(''pure'')と呼ばれている。このコードとデータを完全に分離する設計が関数型プログラミングの大きな特徴である。値は関数の他に'''[[構造体]]'''(''data structure'')としても抽象化され、これも関数の引数または返値となる。プログラムは値の宣言(''declaration'')とそれらを演算子で繋いだ式(''expression'')の連続で構成され、これが順次処理となる。値は数値、構造体、関数、関数連鎖として随時抽象化される。分岐処理は一般に条件式を引数にしてthen式またはelse式のどちらかの[[クロージャ]](''closure'')引数を実行する関数参照を返す'''[[無名関数]]'''(''anonymous function'')の一形態で行なわれる事が多い。反復処理は関数の'''[[再帰]]'''(''recursion'')として行なわれる。再帰はその関数内の評価(''eval'')が変わらなくなるまで繰り返される。これらの特徴を持ったものが関数型プログラミングと見なされる。
 
== コンセプト特徴 ==
何をもって関数型プログラミングとするか、ということに関して、関数型プログラミングのコミュニティ内でも正確な定義や合意というものは存在しない。したがって関数型言語の定義も明確な境界はない。ただし、[[手続き型プログラミング]]が命令実行の列としてプログラムを記述していくのに対し、関数型プログラミングは複数の式を関数の適用によって組み合わせていくプログラミングスタイルである<ref name="faq">{{cite web|url=http://www.cs.nott.ac.uk/~gmh/faq.html|title=Frequently Asked Questions for comp.lang.functional|accessdate=May 14, 2015}}</ref>。手続き型プログラミングの発端は計算機の命令 (instruction/command) や構造に密接にかかわりがある一方、関数型プログラミングは数学の理論を発端としている。
 
1,463

回編集