また間があいてしまった。たまには触らないと鈍る――ってほどなれてるわけでもないけど――ので,練習問題をやってみる。
「ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門」,p.191 から。
標準入力から読み込んだ各行を幅60バイトに納まるように折り返すコマンド,
foldを書きなさい。単語境界やマルチバイト文字は考えなくて構いません。
問題は60バイトだけど30バイトでやってみた。
module Main (main) where
import System
fold :: Int -> String -> String
fold n cs = let (h, t) = splitAt n cs
in if null t then h else h ++ "\n" ++ fold n t
main :: IO ()
main = do cs <- getContents
putStr $ unlines $ map (fold 30) $ lines cs
結果
>runghc fold.hs < fold.hs
module Main (main) where
import System
fold :: Int -> String -> Strin
g
fold n cs = let (h, t) = split
At n cs
in if null t the
n h else h ++ "\n" ++ fold n
t
main :: IO ()
main = do cs <- getContents
putStr $ unlines $ m
ap (fold 30) $ lines cs