「入門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