Из Википедии, свободной энциклопедии
  (Перенаправлен с чисто функционального языка )
Перейти к навигации Перейти к поиску

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

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

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

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

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

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

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

Строгая и нестрогая оценка [ править ]

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

Параллельные вычисления [ править ]

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

Структуры данных [ править ]

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

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

Чисто функциональный язык [ править ]

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

Ссылки [ править ]

  1. ^ Сабри, Амр (январь 1993). «Что такое чисто функциональный язык?». Журнал функционального программирования . 8 (1): 1-22. CiteSeerX  10.1.1.27.7800 . DOI : 10.1017 / S0956796897002943 .
  2. ^ Atencio, Луис (18 июня 2016). Функциональное программирование на Javascript . Публикации Мэннинга. ISBN 978-1617292828.
  3. В мемуарах Герберта А. Саймона (1991), Models of My Life pp.189-190 ISBN 0-465-04640-1 утверждается, что он, Эл Ньюэлл и Клифф Шоу «обычно считаются родителями [ ] искусственный интеллект [область] »за написание Logic Theorist , программы, котораяавтоматическидоказывала теоремы из Principia Mathematica . Для этого им пришлось изобрести язык и парадигму, которые, если смотреть ретроспективно, включают функциональное программирование. 
  4. ^ Маккарти, Джон (июнь 1978 г.). «История Лиспа» . В конференции ACM SIGPLAN по истории языков программирования : 217–223. DOI : 10.1145 / 800025.808387 .
  5. Марлоу, Саймон (18 июня 2013 г.). Параллельное и параллельное программирование в Haskell: методы многоядерного и многопоточного программирования . O'Reilly Media. ISBN 978-1449335946.
  6. ^ Чисто функциональные структуры данных по Крис Окасаки , Cambridge University Press , 1998, ISBN 0-521-66350-4