Folioscope

プログラミング/Unix系/デザイン/CG などのメモがもりもり

不思議の国のHaskell

アリスはHaskellを追いかけてHaskell穴に落ち、壁の棚に様々なものが置いてあるその穴を長い時間かけて落下する。 着いた場所は広間になっており、そこでHaskellコンパイラと、すごいH本を見つける。

研究室に転がっていたすごいH本を、手にとってしまったために始まった,不思議な不思議なHaskell物語。 どのくらいHaskellが不思議かって、とにかく不思議でとにかくすごい!! この物語の続きは、次の本に載っています。

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

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

関数型言語との出会い

これまでいろいろなプログラミング言語を触ってきたが、全部手続き型言語だった。 手続き型言語の代表とも言えるC言語は、コンピュータの仕組みとリンクして考えることができる。 実行の流れはプログラムカウンタのインクリメントで,変数やメソッドの呼び出しはスタック領域にデータを積む。 まさにコンピュータで動かすための言語。 そんな自分には、関数型言語新しい!!

関数型言語は入力があって出力がある関数、まさに数学的である。 プログラムカウンタやスタック領域なんて考えなくてもいい。 全く新しいプログラミング言語である。 だってわざわざ関数型言語ってカテゴリーを作っているくらいだから。 そういえばプログラムカウンタという概念が無い言語にもう一つ心あたりがある。 HDLだ。 HDLはハードウェアを記述するためなので、無限長配列なんてものは実装できないが、 ハードウェアも出力までには、必要なデータを処理する。 使わない端子はどこにも繋がれないだけ。 だってHDLは手続き型言語ではなく、ハードウェア記述言語だもん。 (考え方が間違っていたら、誰か指摘してくださいXD)

もうどのくらい関数型言語がすごいかというと、次の書籍を読むと一目瞭然です!

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

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

Haskellの魅力的な機能たち

Haskellの一つの特徴である遅延評価!! 必要なときに必要な分だけ計算するから、無限長配列だっておてのもの! 例えば次のコード。

take 10 [1,1..]

takeは指定したリストから、指定した長さだけを返す関数。 遅延評価だから、リストの長さは10でも20でも、そして無限でも構わない。 だってtakeは必要な分だけしか評価しないから。

おやおやこの思想、既視感を覚えるぞ! そうだ、シェルだ!シェルのパイプだ!

yes 1 | head -n 10

いやいや他にもHaskellにはいろんな機能がある。 しかしそれらは個別に紹介できない。 なぜならそれらはHaskellの遅延評価が、パターンマッチが、Haskellの構文を機能させる。 その美しいHaskellのシンクロナイズドスイミングは、次の書籍からも観戦することができます。

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

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

他にももっと、Haskellがすごいということがいっぱいある。 でも自分はHaskell初心者だし、あまり適当なことを書くとスーパーHaskell人たちに失礼だ。 それでも、手続き型プログラマ関数型言語を触ることは、草食動物が肉を食べるくらいの新奇なことである、 ということだけは言える。