昨夜、Haskell の学習を始めたばかりで、関数型プログラミング言語を使用したことがありません。マージソートの実装が良いか悪いか、正確には何が良いか悪いかを知りたいだけです。多分それは間違っているかもしれません-ソートはしますが、アルゴリズムはマージソートとは何かと私が思うものではないかもしれません。
ここで改善できることをすべて教えてください。私自身、かなり明確でシンプルな実装だと思います。あなたのアドバイスをありがとう、ここにコードがあります:)
merge [] ys = ys
merge xs [] = xs
merge xs ys = sorted : merge left right
where
sorted = if head(xs) < head(ys) then head(xs) else head(ys)
left = if head(xs) <= head(ys) then tail(xs) else xs
right = if head(xs) > head(ys) then tail(ys) else ys
msort [] = []
msort [x] = [x]
msort xs = merge (msort left) (msort right)
where
left = take (div (length xs) 2) xs
right = drop (div (length xs) 2) xs