Краткость и простота - Основные свойства функциональных языков программирования

Программы на функциональных языках обычно намного короче и проще, чем те же самые программы на императивных языках.

Для примера можно сравнить программы на языке C, на некотором абстрактном функциональном языке и на языке Haskell на примере сортировки списка быстрым методом Хоара (пример, уже ставший классическим при описании преимуществ функциональных языков).

Пример 1. Быстрая сортировка Хоара на языке C:

Void quickSort (int a[], int l, int r)

{

Int i = l;

Int j = r;

Int x = a[(l + r) / 2];

Do

{

While (a[i] < x) i++;

While (x < a[j]) j--;

If (i <= j)

{

Int temp = a[i];

A[i++] = a[j];

A[j--] = temp;

}

}

While (i <= j);

If (l < j) quickSort (a, l, j);

If (i < r) quickSort (a, i, r);

}

Пример 2. Быстрая сортировка Хоара на абстрактном функциональном языке:

QuickSort ([]) = []

QuickSort ([h : t]) = quickSort (n | n t, n <= h) + [h] + quickSort (n | n t, n > h)

Пример 2 следует читать так:

    1. Если список пуст, то результатом также будет пустой список. 2. Иначе (если список не пуст) выделяется голова (первый элемент) и хвост (список из оставшихся элементов, который может быть пустым). В этом случае результатом будет являться конкатенация (сращивание) отсортированного списка из всех элементов хвоста, которые меньше либо равны голове, списка из самой головы и списка из всех элементов хвоста, которые больше головы.

Пример 3. Быстрая сортировка Хоара на языке Haskell:

QuickSort [] = []

QuickSort (h : t) = quickSort [y | y <- xs, y < x] ++ [h] ++ quickSort [y | y <- xs, y >= x]

Как видно, даже на таком простом примере функциональный стиль программирования выигрывает и по количеству написанного кода и по его элегантности.

Кроме того, все операции с памятью выполняются автоматически. При создании какого-либо объекта под него автоматически выделяется память. После того как объект выполнит свое предназначение, он вскоре будет также автоматически уничтожен сборщиком мусора, который является частью любого функционального языка.

Еще одним полезным свойством, позволяющим сократить программу, является встроенный механизм сопоставления с образцом. Это позволяет описывать функции как индуктивные определения.

Пример 4. Определение N-го числа Фибоначчи:

Fibb (0) = 1

Fibb (1) = 1

Fibb (N) = fibb (N - 2) + fibb (N - 1)

Одной из сильных сторон функционального программирования является механизм сопоставления с образцом, который позволяет функциональным языкам выходить на более абстрактный уровень, чем традиционные императивные языки (здесь не рассматривается объектно-ориентированная парадигма и ее расширения).

Похожие статьи




Краткость и простота - Основные свойства функциональных языков программирования

Предыдущая | Следующая