「入門Haskell」のp.31から。
まずは一つ目。linesCountの拡張
① linesCountでは,空白行が続く場合にどんどんカウントしてきます。これを空白行(何もない行)を無視するように拡張しなさい。
オリジナルのlinesCount。
linesCount [] = 0 linesCount ('\n':cs) = 1 + linesCount cs linesCount (c:cs) = linesCount cs
結果。1st line,2nd line … は空行を無視した行番号で,1st line と2nd lineの間に空行がある。
*Main> linesCount "1st line\n\n2nd line\n3rd line\n" 4
で,拡張版。
linesCount lines = atHead lines where atHead [] = 0 atHead ('\n':cs) = atHead cs atHead (c:cs) = 1 + inLine cs inLine [] = 0 inLine ('\n':cs) = atHead cs inLine (c:cs) = inLine cs
結果。
*Main> linesCount "1st line\n\n2nd line\n3rd line\n" 3