ふつける:8章読んだ
8章は「関数」.関数結合とか部分適用とか.7,8章と一気に書くと長くなるんで,分けました.それでは練習問題を解きます.
文字列の先頭にある空白類文字を全て削除する関数lstripをポイントフリースタイルで
空白類文字ね.CharをimportしてisSpaceで良いか.
import Char lstrip :: String -> String lstrip = dropWhile isSpace
文字列の末尾にある空白類文字を全て削除する関数rstripをポイントフリーs(ry
lstripを使っても良い.reverseしてlstripしてreverseが楽そう.
rstrip :: String -> String rstrip = reverse.lstrip.reverse
lstripの続きに書いてます.
文字列の先頭と末尾にある空白類文字を全て削除する関数stripをポイントf(ry
lstripとrstripは使っちゃ駄目,という制限付.メンドクセ.
strip :: String -> String strip = reverse.dropWhile isSpace.reverse.dropWhile isSpace
ただ並べただけ.ちなみに,lstrip,rstripを使ったら,
strip' = rstrip.lstrip
とっても短い.これじゃ練習にならんな.
それじゃ,動作を確認してみます.
Main> lstrip " \t \n hoge" "hoge" Main> rstrip "hoge \t \n " "hoge" Main> strip " \t \n hoge \n" "hoge"
よし.
2章で作成したtail.hsを,できるだけポイn(ry
main = do cs <- getContents putStr $ lastNLines 3 cs lastNLines :: Int -> String -> String lastNLines n = unlines . takeLast n . lines takeLast :: Int -> [String] -> [String] takeLast n = reverse . take n . reverse
nは消せるのかしら.解答を見てみたんだけど,こりゃどうもhead.hsのコードだな.誤植か.
実行結果です.
$ ./tail < tail.hs takeLast :: Int -> [String] -> [String] takeLast n = reverse . take n . reverse
ラストのfgrepは,普通に書いてあるのでやりません.