На функциональном языке вы пишете функцию, которая по заданному списку возвращает отсортированный список, не касаясь (конечно) ввода.
Рассмотрим, например, сортировку слиянием ... сначала вы пишете функцию, которая с двумя уже отсортированными списками возвращает один отсортированный список с элементами обоих. Например:
def merge(a, b):
if len(a) == 0:
return b
elif len(b) == 0:
return a
elif a[0] < b[0]:
return [a[0]] + merge(a[1:], b)
else:
return [b[0]] + merge(a, b[1:])
тогда вы можете написать функцию, которая сортирует список, объединяя результат сортировки первой и второй половины списка.
def mergesort(x):
if len(x) < 2:
return x
else:
h = len(x) // 2
return merge(mergesort(x[:h]), mergesort(x[h:]))
О синтаксисе Python:
L[0]
- первый элемент списка L
L[1:]
- список всех оставшихся элементов
- В более общем смысле
L[:n]
- это список до n-го элемента, L[n:]
, остальные
A + B
, если A
и B
оба списка, это список, полученный путем объединения
[x]
- список, содержащий только один элемент x
PS: обратите внимание, что приведенный выше код на Python просто показывает концепцию ... в Python это НЕ разумный подход. Я использовал Python, потому что думаю, что его легче всего читать, если вы знаете какой-либо другой распространенный императивный язык.