Search on the blog

2011年4月13日水曜日

Haskell勉強記(1)

最近Haskellを勉強しています。
これからこまめにHaskellを勉強して、学んだ内容を公開していきます。

今日の内容は、
  1. pattern match
  2. list match
  3. concatenation
です。

例題として、quick sortを書いてみます。
a = [31, 10, 19, 90, 100, 1, 3, 4]
qsort [] = []
qsort (x:xs) = qsort (filter (<x) xs) ++ [x] ++ qsort (filter (>=x) xs)
main = print $ qsort a
qsortの定義が2つありますが、これはpattern matchと呼ばれています。
C++では、引数の型や型の数によって関数の挙動を変えることができます。(overload)
Haskellの場合は、引数の値に応じて関数の戻り値を変えることができます。

次に、(x: xs)という表現に注目。
Haskellでは、リストを先頭部分とそれ以外に分解して表現することができます。
xがリストの先頭要素、xsはそれ以外です。
これも、一種のpattern matchと考えることができます。

filterに関しては、一般的な関数言語の機能なので割愛。

最後に++演算について。
これは、concatenationです。リストを連結します。

Haskellだと、quick sortがかなりシンプルに書けますね!
今日はここまで。

0 件のコメント:

コメントを投稿