2006年6月29日

Haskell やっとfoldコマンドが作れた

p191の練習問題です。 ひどいコードだけど晒してみる(*ノノ)
fold_length = 60

main = do cs <- getContents
          putStr $ unlines $ concat $ map mysplit $ lines cs

mysplit :: String -> [String]
mysplit cs = mysplit_sub $ splitAt fold_length cs
  where
    mysplit_sub :: (String,String) -> [String]
    mysplit_sub (a,b)
      | null b    = [a]
      | length b > fold_length =
                a : (mysplit_sub $ splitAt fold_length b)
      | otherwise = [a,b]
作り終えたあと、巻末の回答を確認。・・・うわ、めっさエレガントなコードが。caseの使用が思いつかなかったので、mysplit関数とmysplit_sub関数を作っていますが、caseを使えばひとつにまとめられるわけか。 余談ですけど、第4章の回答を確認したところ、第4章時点では紹介されていない「関数合成」を使った回答例が載っていた。これってどうかなぁ・・・。本を最初から読みつつ、理解度チェックのために課題をやっているわけだから、いくらシンプルなコードになるといえ、回答としてはNGだと思う。自分なりに考えに考えて出した答えがベストにどれだけ近い形に出来たのか、それを確認したいのに・・・。

Trackback on "Haskell やっとfoldコマンドが作れた"

このエントリーのトラックバックURL: 

"Haskell やっとfoldコマンドが作れた"へのトラックバックはまだありません。

Comment on "Haskell やっとfoldコマンドが作れた"

"Haskell やっとfoldコマンドが作れた"へのコメントはまだありません。

Post a Comment

コメントする
(書式を変更するような一部のHTMLタグを使うことができます)
ブラウザに投稿者情報を登録しますか?(Cookieを使用します。次回書き込み時に便利です。)
  •  
  •