Функциональное программирование это -...

Get Started. It's Free
or sign up with your email address
Функциональное программирование это -... by Mind Map: Функциональное программирование это -...

1. раздел дискретной математики

2. Основные свойства языков программирования

2.1. краткость и простота;

2.2. строгая типизация

2.3. модульность

2.4. функции — объекты вычисления

2.5. чистота (отсутствие побочных эффектов)

2.6. отложенные (ленивые) вычисления

3. Некоторые концепции

3.1. Чистые функции

3.1.1. обладают несколькими полезными свойствами, многие из которых можно использовать для оптимизации кода:

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

3.1.1.2. Результат вызова чистой функции может быть мемоизирован, то есть сохранен в таблице значений вместе с аргументами вызова. Если в дальнейшем функция вызывается с этими же аргументами, ее результат может быть взят прямо из таблицы, не вычисляясь (иногда это называется принципом прозрачности ссылок). Мемоизация, ценой небольшого расхода памяти, позволяет существенно увеличить производительность и уменьшить порядок роста некоторых рекурсивных алгоритмов

3.1.1.3. Если нет никакой зависимости по данным между двумя чистыми функциями, то порядок их вычисления можно поменять или распараллелить (говоря иначе вычисление чистых функций удовлетворяет принципам thread-safe)

3.1.1.4. Если весь язык не допускает побочных эффектов, то можно использовать любую политику вычисления. Это предоставляет свободу компилятору комбинировать и реорганизовывать вычисление выражений в программе (например, исключить древовидные структуры).

3.2. Функции высших порядков

3.3. Рекурсия

3.4. Подход к вычислению аргументов

4. Языки функционального программирования

4.1. LISP — (Джон МакКарти, 1958) и множество его диалектов, наиболее современные из которых:

4.2. Haskell — чистый функциональный. Назван в честь Хаскелла Карри.

4.3. Erlang — (Joe Armstrong, 1986) функциональный язык с поддержкой процессов.

4.4. APL — предшественник современных научных вычислительных сред, таких как MATLAB.

4.5. ML (Робин Милнер, 1979, из ныне используемых диалектов известны Standard ML и Objective CAML).

4.6. Miranda (Дэвид Тёрнер, 1985, который впоследствии дал развитие языку Haskell).

4.7. F# — функциональный язык семейства ML для платформы .NET

4.8. Nemerle — гибридный функционально/императивный язык.

4.9. и другие языки а так-же их диалекты

4.10. Литература

5. История

5.1. В 1930-х

5.1.1. Аланом Тьюрингом и Джоном фон Нейманом были заложены теоретические основы императивного программирования

5.1.2. В числе разработчиков математических основ функционального программирования можно назвать Моисея Шейнфинкеля и Хаскелла Карри, разработавших комбинаторную логику, и Алонзо Чёрча, создателя λ-исчисления.

5.2. Конец 50-х годов

5.2.1. Джон Маккарти разработал язык Лисп

5.3. Конец 70-х — начало 80-х годов XX века

5.3.1. интенсивно разрабатываются модели типизации, подходящие для функциональных языков

5.3.2. Появляется множество типизированных функциональных языков

5.3.2.1. ML

5.3.2.2. Scheme

5.3.2.3. Hope

5.3.2.4. Miranda

5.3.2.5. Clean

5.3.2.6. И многие другие + различные их диалекты

5.4. Начало 90-х годов

5.4.1. Первая реализация языка, названного Haskell в честь Хаскелла Карри ( в него вошли достоинства различных языков)

5.4.1.1. haskell.org