練習問題(つづき)
「入門Haskell―はじめて学ぶ関数型言語」 p.78 より。
(3) unlines,unwords を intersperse を使って定義しなさい。また使わずに定義しなさい。
まずは使う方から。
myUnlines = (concat . intersperse "\n")
myUnwords = (concat . intersperse " ")
結果。
*Main> myUnlines ["abc","def","ghi"]
"abc\ndef\nghi"
*Main> myUnwords ["abc","def","ghi"]
"abc def ghi"
OK……とおもったら,unlines は一番最後にも改行文字が付くのか。
*Main> unlines ["abc","def","ghi"]
"abc\ndef\nghi\n"
そしたらこうか。あんまりきれいじゃないなぁ。
myUnlines [] = ""
myUnlines list = (concat . intersperse "\n") list ++ "\n"
*Main> myUnlines ["abc","def","ghi"]
"abc\ndef\nghi\n"
OK。
intersperse を使わないほう。これは似たようなことを前(cf. id:takatoh:20060413)にやった。
myUnlines2 [] = ""
myUnlines2 (x:xs) = x ++ "\n" ++ myUnlines2 xs
myUnwords2 [] = ""
myUnwords2 (x:[]) = x
myUnwords2 (x:xs) = x ++ " " ++ myUnwords2 xs
結果。
*Main> myUnlines2 ["abc","def","ghi"]
"abc\ndef\nghi\n"
*Main> myUnwords2 ["abc","def","ghi"]
"abc def ghi"
こっちはすんなりOK。
