Так я даюсь этоHaskell: Полиморфные функции объяснения
intCMP :: Int -> Int -> Ordering
intCMP a b | a == b = EQ
| a < b = LT
| otherwise = GT
intCMPRev :: Int -> Int -> Ordering
intCMPRev a b | a == b = EQ
| a < b = GT
| otherwise = LT
floatCMP :: Float -> Float -> Ordering
floatCMP a b | a == b = EQ
| a < b = LT
| otherwise = GT
Мне нужно написать эту функцию
sort3 :: Ord a => (a -> a-> Ordering) -> [a] -> [a]
sort3 cmp xs =
Какой будет сортировать 3 или меньше элементов по сравнению. Нет рекурсии. Мне было интересно, как это работает, если передать intCMP. Зачем вы передавали это в функцию сортировки? Выполняет ли это назначение при сортировке и возврате отсортированного списка? Я не совсем уверен, как делать подобные сравнения вручную без какого-либо рекурсивного вызова, поэтому я просто пытаюсь понять это лучше.
Я думал делать 3 сравнений, а затем переместить элемент в определенную позицию в списке, но я действительно не знаю, как я мог даже сделать это в Haskell. Любые подсказки о том, как начать это, были бы замечательными. Может быть, какой-то образец?
Спасибо.
Да, я скопировал его прямо из задания. Я понимаю, как это работает сейчас. Но как я теперь буду использовать функцию сравнения? я просто делаю некоторые, если есть инструкции или стражи, и просто делаю cmp x y == GT && cmp y z == GT = [z, x, y], например, или есть способ получить то, что было передано довольно легко? Благодарю. – Matt
Вы на правильном пути! (Хотя ваш пример кажется мне немного странным: cmp x y == GT должен означать x> y, а y> z должен указывать порядок сортировки [z, y, x]). – yatima2975
да извините. Я его записал. Но я просто написал это для примера очень быстро. Хорошо, спасибо. Я думаю, у меня есть идея о том, как это сделать. – Matt