Haskellはやっぱりカッコいい
Preludeのreverseを見てそう思った。
reverse :: [a] -> [a] reverse = foldl (flip (:)) []
この簡潔さとおしゃれさはやばい。やっぱりヤバい。だって世界(リアル・ワールド)は再帰でできてるんですよ。発散しちゃってるけどね。
下のが以前、僕が書いたreverse関数。考え方はあってるんだろうけど、foldlだのflipだのはさくっとでてこない。
rev [] = [] rev (x:[]) = [x] rev (x:xs) = rev (xs) ++ [x]
(追記)
foldl :: (a -> b -> a) -> a -> [b] -> a foldl f z [] = z foldl f z (x:xs) = foldl f (f z x) xs flip :: (a -> b -> c) -> b -> a -> c flip f x y = f y x foldr :: (a -> b -> b) -> b -> [a] -> b foldr f z [] = z foldr f z (x:xs) = f x (foldr f z xs)
こういうのがさっと出てくると本当カッコいいよなぁ...。