Haskell書いてますか?

皆さん、Haskell書いてますか? 関数型言語として名を馳せるHaskell、書いてみない訳がありませんよね!

って事で、今回はHaskellについてちょろっと勉強してみたいと思います。 参考にするのは、すごいHaskellたのしく学ぼう!、通称「すごいH本」と呼ばれる本です。ちなみに、僕が勝手に呼んでる訳では無いのでそこんとこよろしくです。

そもそも関数型言語って何よ?

さて、そもそも関数型言語って何やねんって話ですよね。Haskellのような「関数型言語」は、CやC++のような「手続き型言語」と違って、コンピュータに「何をするか」では無く「何であるか」を伝えます。

...うん、ひどく抽象的ですね。

よく使われる例が以下です。cのような手続き型の言語では、=は「代入」を表し、変数の値を=によって書き換えていくのが普通です。「書き換え」という手続きを行っている訳です。

int a = 5;
a = 6;

一方、Haskellでは、=は「名前に値を結びつける」という意味合いを持ちますが、値を書き換える事は許されません。a=が2回でてくると、Multiple declarations エラーが出てしまいます。

a = 5
a = 6 -- Multiple declarations of `a'

=演算子の役割がそもそも違う訳ですね。一方では「代入」という手続きを行うのに対し、他方ではaの値が何であるかという「宣言」を行っている訳です。

関数を使おう

関数型言語では「手続き」を行う事が出来ない事が分かりました。では、どうやってプログラミングを組み立てて行くのでしょう?

答えは「関数」を使って行こうって事になります。まあ、関数型言語ですもんね。

関数は引数を受け取り、評価されると値を返します。その返ってきた値を引数として別の関数を呼び出す、もしくはある関数の定義の中で別の関数を用いる、といったように関数を組み合わせてより複雑な計算を行う事が出来ます。そうやってプログラミングするのが関数型プログラミングです。

関数の詳しい定義方法については、また後日まとめたいと思います。

型の話

Haskellは強い型付け言語と呼ばれ、値や関数には「型」がついています。「強い」と言っているのは、コンパイル時に型検査が行われ、型安全性が保たれる仕組みが作られているからです。型にはいわゆるIntやFloat、String([Char])等があり、関数の型は引数の型と返り値の型と用いて定義されます。

型についてのもっと詳しい話(型クラスについて等)は、また後日まとめたいと思います。

終わり

という訳で、今日はここまでです。また後日という投げやりな終わり方になっちゃいましたがw、Haskellについて何となくフレーバーだけでも感じてもらえてたら嬉しいです。

それでは!!!

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!