ラムダ式使わないようにrevnumbering書き直したら、nobsunさんに怒られそうなコードになった
自分のコードと発想を元に、なるべくラムダ式を使わない&zipWithを活用する形で書いてみたら・・・・
nobsunさんに思い切り怒られそうなコードが出来上がってしまいました。
nobsunさんのコードナンバリング - Qiitaとは関数の切り分ける処理の単位が違うので、汚くなるのは仕方ないにしても、これは酷過ぎる・・・
import System.Environment numbering = unlines.zipWith (++) [show x | x <- [1..]].lines main = getArgs >>= \args -> mapM readFile args >>= return.map (numbering.reverse) >>= putStrLn.concat.zipWith (++) (map (++"\n") args).map (++"\n")
まだ、ラムダ式をそのまま関数にしたこっちの方が、汚いながらもまだ分かりやすい気がする。
import System.Environment numbering = unlines.zipWith (++) [show x | x <- [1..]].lines main = getArgs >>= \args -> mapM readFile args >>= return.map (numbering.reverse) >>= putStrLn.concat.zipWith f args where f xs ys = xs ++ "\n" ++ ys ++ "\n"
どちらにしても、まだzipWithの使い処が理解できてないというか、関数の切り分け箇所が手続き型的な発想のままみたいで・・・・
面目ないです・・・
あ、numbering関数の方は、通りすがりさんのコードを参考にさせて頂きました。
こちらだけは、すっきりして気に入っています。
2012年12月9日20時36分追記
少しだけマシなコードが出来たので一応。
import System.Environment numbering = unlines.zipWith (++) [show x | x <- [1..]].lines main = getArgs >>= \args -> mapM readFile args >>= putStr.concat.zipWith f args.map (numbering.reverse) where f xs ys = concat [xs,"\n",ys,"\n"]