関数型言語

関数型言語(かんすうがたげんご)は、純粋関数型言語と非純粋関数型言語の総称。 ラムダ計算の概念をプログラミング言語として体現したものである。すべての計算関数の評価によって行われる。[1]

目次

[編集] 概要

関数型言語は、広い意味ではファーストクラス関数オブジェクトを持つ言語である。また、純粋関数型言語では、全ての関数が副作用を持たない。関数型言語の多くは、カリー化遅延評価などの機能を備えている。また、静的型付けの物の多くは型推論の機能を持つ。

引数の評価が関数の実行より先に行われることを正格であるといい、そのような性質を正格性と呼ぶ。正格性に関して非正格である言語は通常、デフォルトでの遅延評価を採用している。純粋関数型言語は遅延評価を標準とし、非純粋関数型言語は正格評価(先行評価)を標準としている。

[編集] 非純粋関数型言語

Schemeを含むLISPは関数型言語に分類されるが、変数の書き換えが可能なため、厳密な定義ではこれらは関数型言語の機能を備えた手続き型言語であるとされる。純粋関数型言語は宣言型プログラミングの一種であるのに対して、非純粋関数型言語は命令型プログラミングの一種である。

非純粋関数型言語の多くが、プロミスを作成して、評価を後回しにする、遅延評価を行える。

[編集] 純粋関数型言語

純粋関数型言語はチューリングマシンをベースとしたCJavaなどの手続き型言語と違い、状態という概念をもたない。そのため参照透過性が保たれる。簡潔にいえば、変数がなく定数しかない。

純粋関数型言語であってもI/O処理を行う際など、必然的に副作用を伴う事になるが、「コンピュータの現在の状態から次の状態を返す関数」などの手法により状態を関数に折り込んでしまうのが普通である。Haskellの場合モナドを使い、Concurrent Clean の場合、環境情報を載せたものを順次渡していく。

[編集] 代表的な関数型言語

分類は通常の場合である。特に正格性と遅延評価に関しては構文などを用いて指定できる場合がある他、コンパイラ最適化する場合もある。

[編集] 純粋関数型言語

[編集] 非純粋関数型言語

[編集] その他の関数的性質を持つ言語

[編集] 関連項目

[編集] 外部リンク

[編集] 参考文献


system wymiany linków wymiana linkami wymiana linkami tanie kredyty gotówkowe kreatyna Plaza 3 star hotel Los Angeles krynica noclegi Sejm Tyk