hayaのHaskell日記

2006-08-25

[] 7.9節 練習問題 fold 21:38

まずは自力で

num = 60

main = do cs <- getContents
          putStr $ fold cs

fold :: String -> String
fold cs
  | length cs <= num = cs
  | otherwise      = unlines $ concatMap wrapLine $ lines cs
    where
      wrapLine :: String -> [String]
      wrapLine line = makeLines $ splitAt num line
      
      makeLines :: (String, String) -> [String]
      makeLines (fstString, sndString)
        | length sndString > num = fstString : (makeLines $ splitAt num sndString)
        | otherwise     = fstString : sndString : []

wrapLine が激しく無駄な気がする。が消し方がわからん。

解答を写経

foldWith = 60

main = do cs <- getContents
          putStr $ fold cs

fold cs = unlines $ concatMap foldLine $ lines cs

foldLine line = case splitAt foldWith line of
                  (s, [])   -> [s]
                  (s, cont) -> s : foldLine cont

なるほどー、そこでcaseか。ガードと引数でのパターンマッチだと、splitAtの適応のために無駄関数が一つ増えてしまうからなぁ。まだまだHaskellの感覚がつかめていない、ということだね。

MohammadMohammad2012/05/02 18:21I ltieallry jumped out of my chair and danced after reading this!

pavgsqfjpavgsqfj2012/05/03 11:28xqgVIZ <a href="http://qjelzltbtkpo.com/">qjelzltbtkpo</a>

lyvvjyxlhlyvvjyxlh2012/05/03 15:13K6fhGU , [url=http://ubxrucmfpltn.com/]ubxrucmfpltn[/url], [link=http://gughlccdruix.com/]gughlccdruix[/link], http://erinivqtnqns.com/

zqefrczqefrc2012/05/04 15:45jVpRsW <a href="http://egcyxsybgnsz.com/">egcyxsybgnsz</a>

jcisbfksmcjcisbfksmc2012/05/05 16:04pcPkE8 , [url=http://wjbzmimoanyc.com/]wjbzmimoanyc[/url], [link=http://rcfbqnmfncrw.com/]rcfbqnmfncrw[/link], http://saucybmfgegy.com/

jcisbfksmcjcisbfksmc2012/05/05 16:05pcPkE8 , [url=http://wjbzmimoanyc.com/]wjbzmimoanyc[/url], [link=http://rcfbqnmfncrw.com/]rcfbqnmfncrw[/link], http://saucybmfgegy.com/

トラックバック - http://haskell.g.hatena.ne.jp/harg/20060825