listで練習

  • リバース

(myreverse xs ++ x)じゃダメ。

myreverse.hs

myreverse [] = []
myreverse (x:xs) = myreverse xs ++ [x]

mymsort.hs

mymerge (f) [] x = x
mymerge (f) x [] = x
mymerge (f) x y = if (f) (head x) (head y)
                       then [head x] ++ (mymerge (f) (tail x) y)
                       else [head y] ++ (mymerge (f) x (tail y))

mymsort _ [a] = [a]
mymsort (f) x = let {
                       ndiv    = div (length x)  2;
                       before = take ndiv x;
                       after  = drop ndiv x;
                    } in mymerge (f) (mymsort f before) (mymsort f after)