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

Краткость и простота

Программы на функциональных языках обычно намного короче и проще, чем те же самые программы на императивных языках. Как стандартный пример, рассмотрим алгоритм быстрой сортировки Хоара. На C этот алгоритм описывается примерно так:

Voidqsort (int a[], int l, int r)

{

Int i = l, j = r, 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) qsort (a, l, j);

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

}

Сравним этот код с кодом на Haskell:

Qsort:: (Ord a) => [a] -> [a]

-- Если Список Пустой, То Сортировать Его Не Нужно...

Qsort [] = []

--...иначе Разобьем Его На Голову - X И Хвост - xs

Qsort (x:xs) =

-- Конкатенация Отсортированного Списка Элементов Хвоста Меньших Или Равных X...

Qsort [n | n <- xs, n <= x] ++

--...и Списка Элементов Хвоста Больших X

Qsort [n | n <- xs, n > x]

Что может быть проще

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

-- Функция, Возвращающая N-е Число Фибоначчи

Fib:: Int ->Int

Fib 0 = 1

Fib 1 = 1

Fib n = fib (n - 2) + fib (n - 1)

Или

-- Функция, Возвращающая Число N В Целой Степени M

Pow:: Int ->Int ->Int

Pow n 0 = 1

Pow n m | even m = pow (n * n) (m 'div' 2)

| otherwise = n * pow n (m - 1)

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




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

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