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

「入門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
カテゴリー: Haskell パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください