昨日の 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")) ""
けどかえって分かりにくいかな。