関数型プログラミング言語Haskell Part25
レス数が950を超えています。1000を超えると書き込みができなくなります。
0986デフォルトの名無しさん
2014/07/25(金) 23:55:14.90ID:ohjVzf57まず、>>982 で「代数的データ型」という言葉を使ったけど、
なぜ代数とか代数的と呼ばれているのか?について
数学では対象領域を方程式という「抽象的なモデル」として定義し、
実数という代数上で交換則や分配則といった法則(代数則)を駆使して解を導く
これと同様に、プログラミングでも対象領域をデータ型という「抽象的なモデル」で
定義し、ある代数上でモナドやファンクタなどの法則を駆使して
最終的なプログラムを導こうという発想が、Haskell プログラミングの根底にある
(そして、それを支える基盤が圏論(カテゴリ理論)になるけど、ここでは触れない)
ここで、数学の実数が形式的に(=厳密に)定義されているように、
プログラムのデータ型にも形式的に構成されていなければならない
代数的データ型は直積/直和とそれらの再帰だけから構成されるデータ型である
たとえば「リストとは data List = Nil | Cons a (List a) と定義される
モノイド(単位的半群)と呼ばれる代数である」と Haskell プログラマは認識する
オブジェクト指向のクラスやインターフェイスも「抽象的なモデル」であるが、
その定義は曖昧であり(=形式的ではなく)、人によってその定義も異なる
それに対して関数型(とりわけ Haskell)では、代数という「抽象的なモデル」を扱うという
点では同じだけど、代数には数学的な形式性が存在する、という決定的な違いがある
レス数が950を超えています。1000を超えると書き込みができなくなります。