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

[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
Xqbot (обговорення | внесок)
м r2.7.3) (Робот: замінив da:Funktionsprogrammering на da:Funktionel programmering
м зняття неактуального шаблону Нп3
Рядок 23:
* [[Clojure]] — функційна мова для платформи [[Java]]
 
Ще не повністю функційні початкові версії [[Lisp]] і [[APL]] внесли особливий внесок до створення і розвитку функційного програмування. Пізніші версії Lisp, такі як [[Scheme]], а так само різні варіанти [[APL]] підтримували властивості і концепції функційної мови.
 
Як правило, інтерес до функційних мов програмування, особливо чисто функційних, був більше науковий, ніж комерційний. Проте, таким примітним мовам як Erlang, OCaml, Haskell, Scheme (після 1986), а так само специфічним R (статистика), Mathematica (символічна математика), J і K (фінансовий аналіз), і [[XSLT]] (XML) знаходили [[застосування]] в індустрії комерційного [[програмування]]. Такі широко поширені [[декларативна мова|декларативні мови]] як [[SQL]] і Lex/Yacc містять деякі елементи функційного програмування, вони остерігаються використовувати змінні.
Рядок 32:
Першою функціональною мовою був [[Lisp]], створений [[Джон МакКарті | Джоном МакКарті]] в період його роботи в [[Массачусетський технологічний інститут | Массачусетському технологічному інституті]] в кінці п'ятдесятих і реалізований, спочатку, для {{нп3|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. Ньюелл, і Кліфф Шоу яких «часто називають батьками штучного інтелекту» за написання програми {{нп3 | Logic Theorist}} автоматично доводить теореми з '' {{нп3 | [[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 справив значний вплив на мову {{нп3 | FP | | | FP (programming language)}}, створену [[Бекуса, Джон | Джоном Бекуса]]. На початку дев'яностих Айверсон і {{нп3 | Роджер Хуей | | | Roger Hui}} створили наступника APL&nbsp;— мова програмування [[J (мова програмування) | J]]. У середині дев'яностих {{нп3 | Артур Вітні | | | Arthur Whitney}}, який раніше працював з Айверсоном, створив мову [[K (мова програмування) | K]], яка згодом використовувалась у фінансовій індустрії на комерційній основі.
Рядок 103:
 
== Особливості ==
Основною особливістю функціонального програмування, яка визначає як переваги, так і недоліки даної парадигми, є те, що в ній реалізується'' модель обчислень без станів''. Якщо імперативна програма на будь-якому етапі виконання має стан, тобто сукупність значень всіх змінних, і виробляє побічні ефекти, то чисто функціональна програма ні цілком, ні частинами стану не має і побічних ефектів не виробляє. Те, що в імперативних мовах робиться шляхом присвоювання значень змінним, в функціональних досягається шляхом передачі виразів в параметри функцій. Безпосереднім наслідком стає те, що чисто функціональна програма не може змінювати вже наявні в ній дані, а може лише породжувати нові, шляхом копіювання та / або розширення старих. Наслідком того ж є відмова від циклів на користь рекурсії.
 
=== Сильні сторони ===