Как мне это сделать в haskell
Вот реализация Haskell сортировки слиянием, которая похожа на
тот, который мы видели на неделе 02 учебных вопросов. 'сортировка слиянием'
обрабатывает основную рекурсию, описанную выше, "split" делает следующее:
расщепление, и "слияние" делает слияние.
Попробуйте функции компонентов на нескольких примерах, чтобы понять, как это делается
они работают. Обратите внимание, что "слияние" работает только так, как ожидалось, когда входные данные
уже отсортированы. -}
сортировка слиянием :: ОГА а =&ГТ; [а] -&ГТ; [а]
сортировка слиянием [] = []
mergeSort [x] = [x]
сортировка слиянием хз = слиянием (сортировка слиянием xs1) (сортировка слиянием xs2)
где (xs1, xs2) = разделить xs [] []
split :: [a] -> [a] -> [a] -> ([a],[a])
split [] ys zs = (ys, zs)
сплит [х] Ю. С. ЗС = (х:йс, ЗС)
сплит (г:з:хз) Ю. С. ЗС = раскол хз (г:ю) (з:ЗС)
слияние :: Ord a => [a] -> [a] -> [a]
слияние [] ys = ys
объединить xs [] = xs
слияния (х:хз) (г:Ю. С.) = Если X &ЛТ; Y, то х : слить хз (г:Ю. С.) Еще г : слияние (х:хз) Ю. С.
{- 'mergeSort', как написано выше, опирается на реализацию 'Ord'
для типа "а", чтобы сделать сравнения. Сортировка слиянием переписать, так что
он принимает в качестве входных данных "компаратор а", вместо того чтобы полагаться на
по умолчанию один из экземпляров 'Ord'. Вам также нужно будет написать
новое определение "слияния", называемое "mergeWith". -}
mergeSortWith :: компаратор a -> [a] -> [a]
mergeSortWith = неопределено
mergeWith :: компаратор a -> [a] -> [a] -> [a]
mergeWith = неопределенный
{- Убедитесь, что вы случайно не вызываете "mergeSort" в рекурсивном режиме
звонки!
Должно быть так, что "mergeSortWith compare" всегда дает
тот же ответ, что и "mergeSort". Например:
&ГТ; mergeSortWith сравнить [5,2,3,4,1]
[1,2,3,4,5]
> mergeSortWith compare ["c", "aaa", "bb"]
["aaa","bb","c"]
Но когда мы используем вышеприведенные функции, мы получаем разные порядки:
> mergeSortWith (инвертировать сравнение) [5,2,3,4,1]
[5,4,3,2,1]
&ГТ; mergeSortWith (сравнение по длине) ["ц", "ААА", "ВВ"]
["c","bb","aaa"]
-}
Что я уже пробовал:
я еще не смог ее решить.
Richard MacCutchan
- пока не удалось решить эту проблему."
Продолжай пытаться.
Richard Deeming
Если вы не понимаете, как начать делать домашнее задание, поговорите с учителем. Для этого они и существуют.