myUnlines と myUnlines2
昨日の IO () さんからの宿題の回答。といっても myInits と myTails のほうはまだ解決してない。とりあえずわかったのから。
cf. id:takatoh:20060513:exercise2
まずは myUnlines を1行で書くことから。これはリストの最後に空文字列をつけてやればいい。
myUnlines list = (concat . intersperse "\n") $ list ++ [""]
*Main> myUnlines ["abc","def","ghi"]
"abc\ndef\nghi\n"
*Main> myUnlines []
""
さらに,セクションにして合成してやれば引数も消せる。
myUnlines = (concat . intersperse "\n") . (++ [""])
じゃあ,次は fold を使って myUnlines2。foldr で右からつないでいけばいい。
myUnlines2 = foldr (\a b -> a ++ "\n" ++ b) ""
*Main> myUnlines2 ["abc","def","ghi"]
"abc\ndef\nghi\n"
*Main> myUnlines2 []
""
無名関数の引数を消すこともできる。
myUnlines2 = foldr ((++) . (++ "\n")) ""
けどかえって分かりにくいかな。
