Основы функционального программирования/Вводная лекция: различия между версиями
Содержимое удалено Содержимое добавлено
WillNess (обсуждение | вклад) |
WillNess (обсуждение | вклад) →Краткость и простота: 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
<!-- Парсер MATH ругается на эту правильную формулу TeX...
Строка 93:
#Если список пуст, то результатом также будет пустой список.
#Иначе выделяется голова (первый элемент) и хвост (список из оставшихся элементов, который может быть пустым). В этом случае результатом будет [[w:Конкатенация|конкатенация]] (сращивание) отсортированного списка из всех элементов хвоста меньших
'''Пример 3. Быстрая сортировка Хоара на языке Haskell'''
<code>quickSort [] = []
quickSort (x:xs) = quickSort [y | y <- xs, y <
quickSort [y | y <- xs, y >= x]</code> Как видно на этом примере, функциональная формулировка алгоритма короче и яснее чем императивная, хоть последняя в данном случае и выигрывает в эффективности исполнения, сортируя массив "на месте", внутри себя, в то время как версия на Хаскеле создает новые списки в ходе работы.
Кроме того, все операции с [[w:Компьютерная память|памятью]] выполняются автоматически. При создании какого-либо объекта под него автоматически выделяется память. Когда объект выполнит своё предназначение, он вскоре будет также автоматически уничтожен [[w:Сборка мусора|сборщиком мусора]], который имеется в любом функциональном языке.
|