ふつける:7章読んだ
読みました.7章は「基本的な構文」.コメントとか,レイアウトとか.友達は「早くね?」とか言いますけど,もともと少しHaskellを触ってから読み始めてるので,新しく覚える事が少ないから,理解にかかる時間が短くて済み,結果ハイペースに見えるだけ.完全に理解できてるか?と言われると疑問符が,ですが.
それでは,いつも通り,練習問題を解きます.
標準入力から読んだ各行を幅60バイトに収まるように折り返すコマンドfoldを書け
単語境界,マルチバイト文字は考えなくて良いとのこと.さて,一行60バイトのファイルとか探すのが面倒なんで,幅10とかにしておきますよ.
とりあえず簡単に.
main = do cs <- getContents putStr $ unlines $ concatMap (fold 10) $ lines cs fold :: Int -> String -> [String] fold _ [] = [] fold n cs = let (fs,sn) = splitAt n cs in fs : fold n sn
let (fs,sn) = splitAt n csの部分が結構すき.パターン束縛ってやつ?
ただ,この状態だとconcatMap (fold 10)の部分がそんなに綺麗に見えないので,
putStr $ unlines $ fold 10 $ lines cs
にします.この方が汎用性が高そうだ.
fold :: Int -> [String] -> [String] fold = concatMap.foldLine foldLine :: Int -> String -> [String] foldLine _ [] = [] foldLine n cs = let (fs,sn) = splitAt n cs in fs : foldLine n sn
しれっと関数結合.8章風に言うと,ポイントフリースタイル.アイキャンダンス*1.
折角where節の説明があるのでfoldLineはwhere節に放り込んでしまうのも有りなのかな.
*1:何人がこのネタに付いて来れるか