Haskell勉強中

どこかの人をまねして、Haskellを覚える課程を書いてみる。
目標は、波動方程式をシミュレーションすること。できれば、今夜の1時ぐらいまでには形にしたい。無理だっ。あきらめて、明日やることにする。


まずは、hugsをダウンロード。
並列してA Gentle Introduction to Haskell, Version 98を読み始める。

SMLの香り

inc n          = n+1

で関数incを定義する。SMLっぽいなー。
ここに来て、インタプリンタのダウンロードが終わったので走らせてみることにする。
おや、エラーがでる。なんでやろ。はあはあ、どうもHugsはインタプリンタであって、対話式ではないらしい。ソースコードはテキストファイルに書かないといかんみたいだ。面倒だ。

試しに、上の内容をテキストに書いて:loadで読み込んで、

inc 1

とやったら2と表示された。

数学だ

\f(x) | x \in xs\:Haskellを使ってかくと、

[ f x | x <- xs ]

そっくりやん。

4行のクイックソート

quicksort  = 
quicksort (x:xs) = quicksort [y | y <- xs, y < x]
                 ++[x]
                 ++quicksort [y | y <- xs, y >= x]

非正格な関数

要するに、必要になったときに評価する怠け者ってこと。

- 無限ループ
loop = loop

- 常に1を返す
f x = 1

としておいて、

f loop

をやっても、普通に1を返す。
Cとかじゃ、こうはいかない。loopが評価されてしまう。

とど(TODO)ちゃん

遅延パターンがようわからん。また今度ね。

PHYTHONの香り

Haskellではインデントが意味を持っている。この考え方は本当にセンスいいと思う。