Сортировка строк в алфавитном порядке - PullRequest
0 голосов
/ 16 октября 2019

Я должен запрограммировать функцию

sort3 :: String -> String -> String -> (String, String, String)

, которая сортирует по функции (<=) (также мы можем использовать мин или макс)

например:

sort3 "Is" "This" "Food"
("Food", "Is", "This")

sort3 "Car" "45" "Table"
("45","Car","Table")

1 Ответ

2 голосов
/ 16 октября 2019

При сортировке трех строк a , b и c существует шесть способов упорядочения строк:

  1. (а, б, в) ;
  2. (а, в, б) ;
  3. (б, а, в) ;
  4. (б, в, а) ;
  5. (в, а, б)
  6. (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 | &hellip; <= &hellip; && &hellip; <= &hellip; = (&hellip;, &hellip;, &hellip;)
            | &hellip; <= &hellip; && &hellip; <= &hellip; = (&hellip;, &hellip;, &hellip;)
            | &vellip;

В качестве примера я покажу, как реализовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...