Haskell

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

Haskell(ハスケル)とは、プログラミング言語の一つ。

概要[編集]

関数型言語の中でも厳格な言語で、参照透過性、遅延評価、強い静的型付けなどの特徴がある。

厳格な参照透過性のため、同じ内容の式は異なる箇所に書かれていても必ず一度だけ評価される。この特性により、データ構造や状態を手続き型言語のように手軽に扱うことができない。Haskellではモナドという概念を導入して、参照透過性を維持しつつデータ構造や状態[1]を扱うことができるようになっている。
構文糖衣として手続きを表現できるケース(do記法)もあるが、原則として手続きを書くことは出来ないので、手続き型言語でのプログラミングに慣れているプログラマーにはやや扱いづらい。

遅延評価により、評価式の評価は必要になるまで遅延される。例えば、引数として評価式を与えた場合、関数の中でその引数の評価が必要になった時に評価される。関数の中でその引数が使用されなければ、その式自体は評価されない[2]

強力な型システムがあり、型推論やデータ表現などによって、型が厳格に決定される強い静的型付けの言語である。

実はHaskellでは、関数の引数は常に1つである。2つ以上の引数を取る関数は、実態はカリー化 ()によるもので、構文糖衣として複数の引数を取る表現が可能になっている。

数学者であるハスケル・カリー(Haskell Curry)にちなんで名付けられた[3]

処理系はGHC、Hugsがよく知られている。

脚注[編集]

  1. すなわち、Maybe、List、State、IOなどの各種モナドである。
  2. 手続き型のサブルーチン呼び出しで引数に評価式を与えた場合は、通常は呼び出し前に式が評価されるので、評価が必要でない場合でも評価されてしまう。ロギングなどのような場合は、遅延評価の方が便利だったりする。
  3. カリー化もカリーにちなんでいるが、カリー化を考案したのはカリーではないらしい。