Почему Вы только не проверяете свой HTML?
Двойной идентификатор не позволяется, и обычно Вы получите ошибку анализа.
Результатом быстрой сортировки пустого списка является пустой список.
Результат быстрой сортировки непустого списка, где мы вызываем первый элемент списка x
и оставшиеся элементы xs
: Результат быстрой сортировки всех элементов xs
, которые меньше x (*), за которым следует x, за которым следует результат быстрой сортировки всех элементы xs, которые больше x.
(*) Для уточнения: [y | y <- xs, y
y
Это декларативный язык, поэтому вы просто читаете то, что видите. sepp2k делает хороший пример выше.
На случай, если ваша проблема связана с пониманием списка, вот несколько альтернативных версий, которые более или менее одинаковы:
quicksort [] = []
quicksort (x:xs) =
quicksort (filter (< x) xs) ++
[x] ++
quicksort (filter (>= x) xs)
quicksort [] = []
quicksort (x:xs) =
quicksort smaller ++ [x] ++ quicksort bigger
where
(smaller, bigger) = partition (< x) xs
Проверить http://learnyouahaskell.com/recursion#quick-sort он точно объясняет, что делает быстрая сортировка.
Не делали этого со времен колледжа ...
Это рекурсивно - первая строка соответствует пустому множеству.
quicksort [] = []
Следующие несколько строк работают с непустым установлен. Синтаксис (x: xs) разбивает его на один элемент (x) и остальные элементы (xs).
quicksort (x:xs) = quicksort [y | y <- xs, y<x ]
++ [x]
++ quicksort [y | y <- xs, y>=x]
Первая строка, quicksort [y | y <- xs, y Средняя строка - это просто набор, содержащий x. Последняя строка, quicksort [y | y <- xs, y> = x], вызывает быструю сортировку для набора всех элементов из xs, которые больше или равны x (т. е. каждого y из xs, который больше или равен x). Если xs - пустой набор, тогда quicksort [] вернет [].
Это не дает прямого ответа на ваш вопрос, но hoogle может помочь вам в обучении В общем, вы можете использовать его для поиска в стандартных библиотеках API либо по имени функции, либо по приблизительной сигнатуре типа.
Вот примеры поисковых запросов, которые он поддерживает:
map
(a -> b) -> [a] -> [b]`
Ord a => [a] -> [a]
Data.Map.insert