4
我是相当新的Haskell和不理解下面分而治之的结构:分而治之:合并排序
{- trivial solve split combine input/output-}
dc :: (a -> Bool) -> (a -> b) -> (a -> [a]) -> ([b] -> b) -> a -> b
dc trivial solve split combine = x
where
x y = if trivial y then solve y
else (\_ z -> combine z) y (map x (split y))
现在我需要实现在此基础上构建一个合并排序功能。我试图实现一些功能,但我很确定这不是它应该如何工作:
trivial :: (Ord a, Num a) => [a] -> Bool
trivial [] = True
trivial (x:[]) = True
trivial (x:x':xs) = if x<=x' then trivial (x':xs) else False
split :: [a] -> [[a]]
split (x:[]) = [[x]]
split (x:xs) = [x] : split xs
combine :: [[a]] -> [a]
combine [[]] = []
combine ([]:ys) = combine ys
combine ((x:xs):ys) = x : combine (xs:ys)
那么上述构造如何工作? “x”和“y”代表什么? “微不足道”和“解决”(以及分裂/合并)应该做什么?