関数の定義とパターンマッチング

「入門Haskell」から文字列の文字数を数える関数。

 bytesCount []     = 0
 bytesCount (c:cs) = 1 + bytesCount cs

関数名 bytesCount につづく引数の部分がパターンを表していて,受け取った引数のパターンによって関数本体の内容が変わる。
1行目の [] は空のリスト,c:cs は先頭の要素とそれ以降の要素に分けられることを表している。だからこの関数を評価すると,引数が空リストなら 0,空でないなら(先頭とそれ以降に分けられるから)先頭の文字数 1 に以降の文字数を足したもの,となる。
パターンがいくつもある場合には定義をいくつも書けばいい。パターンは上から順にチェックされる。


リストの操作は基本的に先頭から順に,再帰的にすればいいようだ。


ちょっと練習。すべての要素を足し合わせる。

 mySum []     = 0
 mySum (c:cs) = c + mySum cs

実行結果。

 *Main> mySum [1,2,3,4,5,6,7,8,9,10]
 55
 *Main> mySum []
 0