Функційне програмування: відмінності між версіями

[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
Немає опису редагування
джерело твердження?
Рядок 4:
Іншими словами, ''функційне програмування'' є способом створення програм, в яких єдиною дією є виклик функції, єдиним способом розбиття програми є створення нового імені функції та задання для цього імені виразу, що обчислює значення функції, а єдиним правилом композиції є оператор суперпозиції функцій. Жодних комірок пам'яті, операторів присвоєння, циклів, ні, тим більше, блок-схем чи передачі управління.<ref>Хендерсон 1983, Предисловие редактора перевода</ref>
 
Ширша концепція функційного програмування визначає набір спільних правил та тем замість переліку відмінностей від інших парадигм. До таких, що часто вважаються важливими, належать функції вищого порядку<ref>''Вольфенгаген В. Э.'' Конструкции языков программирования. Приемы описания.&nbsp;— М: АО «Центр ЮрИнфоР», 2001.&nbsp;— 276 с ISBN 5-89158-079-9.</ref> та функції першого класу: [[замикання (програмування)|замикання]], та [[рекурсія]]. До інших поширених можливостей функційних [[мова програмування|мов програмування]] належать [[продовження]], [[система типізації ХіндліГіндлі-Мілнера]], нечіткі обчислення (включно з, але, не обмежуючись, [[Ліниві обчислення|лінивими обчисленнями]]), та [[Монади (програмування)|монади]].
 
Основну увагу функційним мовам програмування, особливо, «чисто функційним», приділили академічні дослідники. Однак, до відомих функційних мов програмування, які використовуються в промисловості та комерційному програмуванні належить [[Erlang]] (паралельні програми), [[R (мова програмування)|R]] (статистика), [[Mathematica]] (символьні обчислення), [[J (мова програмування)|J]] та [[K (мова програмування)|K]] ([[фінансовий аналіз]]), та спеціалізовані мови програмування наприклад [[XSLT]]. Істотний вплив на функційне програмування здійснило [[лямбда-числення]], мова програмування [[APL (мова програмування)|APL]], мова програмування [[Lisp]] та новіша мова програмування [[Haskell]].
 
{{джерело|Функційне програмування часто називають «функціональним», хоча насправді [[функціонально-орієнтоване програмування]]&nbsp;— це інша категорія, де основою є компонування програм у ряд програмних продуктів.}}
 
== Мови програмування ==
Рядок 32:
Першою функційною мовою був [[Lisp]], створений [[Джон МакКарті|Джоном МакКарті]] в період його роботи в [[Массачусетський технологічний інститут|Массачусетському технологічному інституті]] в кінці п'ятдесятих і реалізований, спочатку, для {{Не перекладено|IBM 700/7000|||IBM 700/7000 series}}. Lisp визначив множину понять функційної мови, хоча при цьому сповідував не тільки парадигму функційного програмування {{sfn|J. Harrison|1997|loc = Гл. 3. λ-числення як мова програмування}}. Подальшим розвитком Ліспу стали такі мови як [[Scheme]] і [[Dylan (мова програмування)|Dylan]].
 
Мова обробки інформації ({{Information Processing Language}}, IPL) іноді визначається як найперша машинно-функційна мова<ref> У своїх мемуарах [[Герберт Саймон]] (1991),'' Models of My Life'' pp. 189–190 ISBN 0-465-04640-1 стверджує, що його, Al. Ньюелл, і Кліфф Шоу яких «часто називають батьками штучного інтелекту» за написання програми {{не перекладено|Logic Theorist}} автоматично доводить теореми з ''[[Principia Mathematica]]''. Для того, щоб досягти цього, вони повинні були придумати мову і парадигму, яку, ретроспективно, можна розглядати як функційне програмування. </Ref>. Це мова [[Мова асемблера|ассемблерного]] типу для роботи зі списком символів. У ньому було поняття «генератора», який використовував функцію як аргумент, а також, оскільки це мова ассемблерного рівня, він може позиціонуватися як мова, що має функції вищого порядку. Однак, в цілому IPL акцентовано на використання імперативних понять<ref> [http://hopl.murdoch.edu.au/showlanguage.prx?exp=13&language=IPL History of Programming Languages: IPL] </ref>.
 
[[Айверсон, Кеннет Юджин|Кеннет Е. Айверсон]] розробив мову [[АПЛ (мова програмування)|APL]] на початку шістдесятих, продокоментувавши її в своїй книзі A Programming Language (ISBN 9780471430148)<ref> {{книга|частина = XIV. APL Session|заголовок = History of Programming Language|ISBN = 0-12-745040-8|відповідальний = Richard L. Wexelbblat|видавництво = Academic Press|рік = 1981|сторінки = 661—693|сторінок = 749}} </ref>. APL справив значний вплив на мову {{Не перекладено| FP|||FP (programming language)}}, створену [[Бекуса, Джон|Джоном Бекуса]]. На початку дев'яностих Айверсон і {{Не перекладено| Роджер Гуй|||Roger Hui}} створили наступника APL&nbsp;— мова програмування [[J (мова програмування)|J]]. У середині дев'яностих {{Не перекладено| Артур Вітні|||Arthur Whitney}}, який раніше працював з Айверсоном, створив мову [[K (мова програмування)|K]], яка згодом використовувалась у фінансовій індустрії на комерційній основі.
Рядок 40:
У вісімдесятих [[Пер Мартін-Леф]] створив інтуїціонистську теорію типів (також звану конструктивною). У цій теорії функційне програмування отримало конструктивний доказ того, що раніше було відомо як залежний тип. Це дало потужний поштовх до розвитку діалогового доказу теорем і до подальшого створення безлічі функційних мов.
 
[[Haskell]] був створений в кінці вісімдесятих у спробі поєднати безліч ідей, отриманих у ході дослідження функційного програмування.<ref Name="hudak1989"> {{cite journal|author = {{Не перекладено|Пол Хьюдак ПолГ'юдак|Пол Хьюдак|en|Paul Hudak}}|title = Conception, evolution, and application of functional programming languages ​​| journal = [[Association for Computing Machinery|ACM]] Computing Surveys|volume = 21|issue = 3|pages = 359 −411|month = September|year = 1989|url = }} </ref>
 
== Концепції ==
Рядок 47:
=== Функції вищих порядків ===
{{Main | Функція вищого порядку}}
Функції вищих порядків&nbsp;— це такі функції, які можуть приймати як аргументи і повертати інші функції.<ref Name="functional">{{cite book
|url = [http://wm-help.net/books/book/49.html
|title Завантажити= PDF: "Техніки функційного програмування,
|author = В.&nbsp; А.&nbsp; Потапенко
|page «стор.= 8»
|chapter = Функції вищих порядків "]. }}</ref> Математики таку функцію частіше називають [[оператор (математика) | оператором]], наприклад, оператор взяття похідної або інтегральний оператор.
 
Функції вищих порядків дозволяють використовувати [[Каррінг (інформатика)|каррінг]]&nbsp;— перетворення функції від пари аргументів у функцію, що бере свої аргументи по одному. Це перетворення отримало свою назву на честь [[Гаскелл Каррі|Гаскелла Каррі]].