Arch Linux 上に ghc をインストールする方法は こちら . Haskell は関数型言語の一種で,関数計算の連鎖でプログラムが動きます. C 言語などにも関数はありますが,Haskell の関数はより数学的です. まずは関数とは何かを説明します. 関数 Haskell において,関数は「 値を変換するもの 」です. 例えば,次のような,入力に$1$を加えて返す関数$f$を考えます. $$ f(x) = x + 1 $$ $x$が$1$だと$2$になります($f(1) = 2$). 関数$f$と$1$がくっつくと,$2$になってしまうのです. $x = 2$の場合,$f(2) = 3$ですし,$x = 3$の場合は$f(3) = 4$になります. つまり,関数というのは,定義という名のルールに従って,入力を出力に変換しているのです. では,C言語の関数と何が違うのでしょうか? Haskell の関数は,基本的に,同じ入力の時は同じ出力にならなければなりません. 上の関数$f$を見ると,どんな時でも同じ入力の時に同じ出力になります. ところが,C言語の場合は同じ入力でも簡単に違う出力にできてしまいます. 入力が void 型(つまり入力なし)の時でも自由自在に出力を変えることができます. 逆に,入力だけ見ても出力を決めることができないということもできます. Haskellの関数の基本は入力だけを見て出力が決まるという特徴があるので,「値を変換するもの」と見えるのです. ラムダ抽象 「関数=値を変換するもの」という考え方を発展させたものがラムダ抽象です. 中学や高校の数学において,関数というのは必ず名前がありました. 関数は値を変換してくれればいいだけなのに,必ず名前を決めてあげないと定義できません. これをラムダ計算(lambda calculus)では,「 入力をもらうと計算した結果を返すもの 」を定義できるようにしました. 例えば,入力が$x$なら,$x + 1$を返す関数を $$ \lambda x . x + 1 $$ と書くことにしたのです. 最初の$\lambda$と$.$の間には入力の変数を1つ書くことができます. ...
コメント
コメントを投稿