При сортировке трех строк a , b и c существует шесть способов упорядочения строк:
- (а, б, в) ;
- (а, в, б) ;
- (б, а, в) ;
- (б, в, а) ;
- (в, а, б) ;и
- (c, b, a) .
В этих ответах соотношение e 1 ≤e 2 ≤e 3 должен содержать, с e i i -ым элементом в кортеже.
Таким образом, это означает, что вы можете реализовать функцию следующим образом:
sort3 :: Ord a => a -> a -> a -> (a, a, a)
sort3 a b c | … <= … && … <= … = (…, …, …)
| … <= … && … <= … = (…, …, …)
| ⋮
В качестве примера я покажу, как реализовать sort2
. Я оставляю sort3
в качестве упражнения:
sort2 :: Ord a => a -> a -> (a, a)
sort2 a b | a <= b = (a, b)
| otherwise = (b, a)
Обратите внимание, что вы можете использовать sort2
при реализации sort3
. Действительно, вы можете использовать три sort2
вызова для правильной сортировки трех кортежей. Это, однако, немного более продвинутый продвинутый подход. Я предлагаю, чтобы вы сначала стремились реализовать sort3
без sort2
, а затем стремитесь реализовать его в терминах sort2
.