Я пытаюсь понять Scala пример quicksort из Википедии. Каким образом образец может быть разобран шаг за шагом и что означает весь синтаксический сахар?
def qsort: List[Int] => List[Int] = {
  case Nil => Nil
  case pivot :: tail =>
    val (smaller, rest) = tail.partition(_ < pivot)
    qsort(smaller) ::: pivot :: qsort(rest)
}
Насколько я могу собрать на этом этапе qsort - это функция, которая не принимает никаких параметров и возвращает новый Function1 [List [Int], List [Int]], который реализует quicksort посредством использования сопоставления шаблонов, манипулирования списком и рекурсивных вызовов. Но я не могу понять, откуда возникает точка опоры, и как именно работает синтаксис соответствия шаблону в этом случае.
UPDATE:
Спасибо всем за великие объяснения!
Я просто хотел поделиться другим примером реализации quicksort, который я обнаружил в Scala по примеру Мартин Одерский. Хотя он основан на массивах, а не на списках, и меньше на шоу в терминах varios Scala, я лично считаю его менее запутанным, чем его коллега из Википедии, и гораздо более понятным и точным выражением базового алгоритма:
def sort(xs: Array[Int]): Array[Int] = {
    if (xs.length <= 1) xs
    else {
        val pivot = xs(xs.length / 2)
        Array.concat(
            sort(xs filter (pivot >)),
            xs filter (pivot ==),
            sort(xs filter (pivot <)))
    }
}
