これからこまめにHaskellを勉強して、学んだ内容を公開していきます。
今日の内容は、
- pattern match
- list match
- 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 件のコメント:
コメントを投稿