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