6.Стили программирования
Императивные
программы имеют склонность акцентировать
последовательности шагов для выполнения
какого-то действия, а функциональные
программы к расположению и композиции
функций, часто не обозначая точной
последовательности шагов. Простой
пример двух решений одной задачи
(используется один и тот же язык Python)
иллюстрирует это.
# императивный
стиль
target = [] # создать
пустой список
for item in source_list: #
для каждого элемента исходного списка
trans1 = G(item) #
применить функцию G()
trans2 = F(trans1) #
применить функцию F()
target.append(trans2)
# добавить преобразованный элемент в
список
Функциональная
версия выглядит по-другому:
# функциональный
стиль
# языки ФП часто
имеют встроенную функцию compose()
compose2
= lambda A, B: lambda x: A(B(x))
target =
map(compose2(F, G), source_list)
В отличие от
императивного стиля, описывающего шаги,
ведущие к достижению цели, функциональный
стиль описывает математические отношения
между данными и целью.
Более точно,
существует четыре ступени развития
функционального стиля, в порядке убывания
роли данных в программах:
Рефал
(для этой категории, представленной
единственным языком, нет общепринятого
названия);
Аппликативные
(Лисп,
ML,
Tcl,
Rebol);
Комбинаторные
(APL/J/K,
FP[en]/FL[en]);
Бесточечные
(чистые
конкатенативные)
(Joy,
Cat,
Factor,
подмножество PostScript).
В первом случае
вся структура программы определяется
структурой данных, в последнем — данные
как таковые вообще отсутствуют в исходном
коде, они лишь подразумеваются на входе.
Некоторые языки поддерживают ряд стилей:
например, Haskell
позволяет писать и в аппликативном, и
в комбинаторном, и в бесточечном стилях.
Вывод: в изучении
данной статьи я понял, что язык является
не простым в изучении как это показано
в описании выше.