Основы функционального программирования/Вводная лекция: различия между версиями

Содержимое удалено Содержимое добавлено
→‎Краткость и простота: changed qSort into stable version; removed vandalism
Строка 84:
<math>\operatorname{quickSort} ([\,]) = [\,]</math>
 
<math>\operatorname{quickSort} ([x:xs]) = \operatorname{quickSort} ([y \mid y \in xs,\, y \leq< x]) + [x] + \operatorname{quickSort} ([y \mid y \in xs,\, y >\geq x])</math>
 
<!-- Парсер MATH ругается на эту правильную формулу TeX...
Строка 93:
 
#Если список пуст, то результатом также будет пустой список.
#Иначе выделяется голова (первый элемент) и хвост (список из оставшихся элементов, который может быть пустым). В этом случае результатом будет [[w:Конкатенация|конкатенация]] (сращивание) отсортированного списка из всех элементов хвоста меньших либо равных головеголовы, списка из самой головы и списка из всех элементов хвоста бо́льших головылибо равных голове.
 
'''Пример 3. Быстрая сортировка Хоара на языке Haskell'''
 
<code>quickSort [] = []
quickSort (x:xs) = quickSort [y | y <- xs, y <= x] ++ [x] ++
quickSort [y | y <- xs, y >= x]</code>
 
Как видно на этом примере, функциональная формулировка алгоритма короче и яснее чем императивная, хоть последняя в данном случае и выигрывает в эффективности исполнения, сортируя массив "на месте", внутри себя, в то время как версия на Хаскеле создает новые списки в ходе работы.
Как видно, даже на таком простом примере, функциональщики не знают что такое сортировка Хоара.
 
Кроме того, все операции с [[w:Компьютерная память|памятью]] выполняются автоматически. При создании какого-либо объекта под него автоматически выделяется память. Когда объект выполнит своё предназначение, он вскоре будет также автоматически уничтожен [[w:Сборка мусора|сборщиком мусора]], который имеется в любом функциональном языке.