Чисто функциональное программирование - Purely functional programming

В информатике , чисто функциональное программирование обычно обозначает программирование парадигма -a стиль построения структуры и элементов компьютерных программ, которые обрабатывают все вычисления в качестве оценки математических функций . Чисто функциональное программирование также может быть определено путем запрета изменений состояния и изменяемых данных.

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

Разница между чистым и нечистым функциональным программированием

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

Программа, как правило , называется функциональным , если он использует некоторые концепции функционального программирования , такие как функции первого класса и функции высшего порядка . Однако функция первого класса не обязательно должна быть чисто функциональной, поскольку она может использовать методы императивной парадигмы, такие как массивы или методы ввода / вывода , которые не являются чисто функциональными программами. Фактически, самые ранние языки программирования, названные функциональными, IPL и Lisp , по нынешнему определению были «нечистыми» функциональными языками.

Чисто структура функциональных данных являются стойкой . Для функционального программирования требуется постоянство; без него одно и то же вычисление могло бы вернуть разные результаты. Функциональное программирование может использовать постоянные не чисто функциональные структуры данных , в то время как эти структуры данных не могут использоваться в чисто функциональных программах.

Свойства чисто функционального программирования

Строгая и нестрогая оценка

Каждая стратегия оценки, которая заканчивается чисто функциональной программой, дает один и тот же результат. В частности, это гарантирует, что программисту не нужно учитывать, в каком порядке оцениваются программы, поскольку активное вычисление вернет тот же результат, что и ленивое вычисление . Однако все еще возможно, что нетерпеливое вычисление может не завершиться, пока ленивое вычисление той же программы останавливается. Преимущество этого состоит в том, что ленивое вычисление может быть реализовано намного проще; поскольку все выражения будут возвращать один и тот же результат в любой момент (независимо от состояния программы), их вычисление может быть отложено на сколько угодно времени.

Параллельные вычисления

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

Структуры данных

Чисто функциональные структуры данных часто представляются иначе, чем их императивные аналоги. Например, массив с постоянным доступом и обновлением является основным компонентом большинства императивных языков, а многие императивные структуры данных, такие как хэш-таблица и двоичная куча , основаны на массивах. Массивы могут быть заменены картой или списком произвольного доступа , который допускает чисто функциональную реализацию, но время доступа и обновления является логарифмическим . Следовательно, чисто функциональные структуры данных могут использоваться в языках, которые не являются функциональными, но они могут быть не самым эффективным доступным инструментом, особенно если постоянство не требуется.

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

Чисто функциональный язык

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

использованная литература