関数型言語

出典: 謎の百科事典もどき『エンペディア(Enpedia)』
ナビゲーションに移動 検索に移動

関数型言語とは、関数型プログラミングを行うために特化した機能・仕様を持つプログラミング言語である。

概要[編集]

関数型プログラミングとは、関数を中心としたプログラミングによってプログラムを組むプログラミング手法である。関数型言語とは、それを可能にするための構文などの仕様を組み込んだプログラミング言語を指す。誤解を恐れずに言えば、数式[1]を組み合わせてプログラムを組むスタイルである。

よく知られている言語には、LISP系(Scheme系を含む)、ML系、Haskell、Clean、F#などがある。

関数型言語の関数は、手続き型言語などの関数に比べてより数学的な表現が可能である。
例えば、関数型言語における関数は第一級オブジェクトとして扱うことができるため、ラムダ計算などの計算モデルに親和性が高い。

特徴[編集]

関数型としての厳密さ(純粋さ)によって異なるが、基本的には状態遷移を必須としない。
これによって、状態を持つことで発生する副作用の問題[2]を避けることができる。

また、原則として制御文も持たない。IF文は条件演算子のような式で表す。ループは再帰を用いる。CASE文は、パターンマッチング[3]という手法を用いる。

状態遷移を排した言語は純粋関数型と呼ぶことがある。[4]
数学上の関数の連鎖には、理論上はその操作における時間の推移を扱う概念が無いため、状態遷移とは親和性が低い。
例えば、データ構造やI/O制御である。純粋関数型言語であるHaskellではモナドという概念を用いてこれを解決している。

脚注[編集]

  1. 関数型プログラミングにおいて数式は関数のひとつとみなされている。演算子を関数名として見れば数式も関数と言える。'+' a b = a + b('+'が関数名)
  2. 状態を持つということは、状態のバリエーションの数だけ問題が発生する可能性が生まれる。また、テストの難易度が上がる。関数型でなくても無駄な状態を持つことは避けるべきである。
  3. 厳密でない言い方をするなら、CASE文を式として表現したものに近い。
  4. 純粋関数型の定義は状態遷移についてだけではない。