reverse を自分で実装

突然 Haskell ネタ。リストの要素を逆順にして返す関数、reverse。これと同等の機能を自作してみよう。車輪の再発明だけど学習の過程においては効果的な方法なのである。

myReverse :: [a] -> [a]
myReverse [] = []
myReverse (x:xs) = myReverse xs ++ [x]

これで、

Main> myReverse "abcde"
"edcba"
Main> myReverse [1,2,3,4,5]
[5,4,3,2,1]

のように逆順の値が返ってくる。自分で書いたコードが動いてようやく「分かった」という気になる。少し前進。


追記 GHC のソースを見ると、foldl、flip などを使って実装しているようである。まだ自分にはさっぱり分からない。


Real World Haskell―実戦で学ぶ関数型言語プログラミング

Real World Haskell―実戦で学ぶ関数型言語プログラミング

現在第4章を読んでる最中