SlideShare a Scribd company logo
1 of 43
3-я конференция .NET разработчиков 25 сентября 2011 Некоторые элементы функциональных языков программирования Александр Карпич
Содержание ,[object Object]
λ-нотация
Основные элементы ФП
«Зачем это нужно?»,[object Object]
Императивное программирование ,[object Object]
Состояния изменяются присваиванием
Программа – последовательность инструкций по изменению состояния,[object Object]
Функциональное программирование
Функциональное программирование ,[object Object]
Нет присваиваний;
Нет последовательного выполнения команд;
Подобия циклов с помощью рекурсии;
Функции высших порядков.,[object Object]
Большее соответствие математическим моделям;
Бо́льшая свобода исполнения операций.,[object Object]
Параметризация и модульность;
Удобные способы представления бесконечных данных.,[object Object]
Интерактивные программы;
Относительно высокий порог вхождения.,[object Object]
1958 г. – Дж. Маккарти изобрёл LISP;
1973 г. – Создан язык ML;
1985 г. – На основе ML создан Oсaml;
2002 г. – На основе OCamlсоздан F#,[object Object]
Примеры (λx.2x + 1) 3 β-редукция: (λx.2x + 1) 3 = 2∙3 + 1 δ-редукция: 2∙3 + 1 = 7
(λx y.x + y) 1 β-редукция: (λx y.x + y) 1 = λy.1 + y
λx y.x + y = λx.(λy.x + y)
(λx.xx) (λx.xx)  = (λx.xx) (λx.xx) Получили невычислимое выражение. (λx.1)(λx.xx) (λx.xx) = (λy.yy) (λx.xx)
Основные элементы функциональных языков программирования ,[object Object]
Higher-order function (функция высшего порядка);
Pattern matching (сопоставление с образцом);,[object Object]
Автоматический вывод типов;
Модель типизации Хиндли-Милнера;
Работает не всегда.,[object Object]
Pattern matching letxor x y = match x, y with 		| true, true -> false 		| true, false -> true 		| false, true -> true 		| false, false -> false ;; valxor : bool -> bool -> bool
F# killer features: ,[object Object]
Статическая типизация;
Интероперабельность с .NET;
Ленивые вычисления.,[object Object]
fsi.exe – REPL;
fsc.exe;
Mono.,[object Object]
Некоторые встроенные типыF# ,[object Object],>let tuple = “first”, 15, 16.8;; valtuple : string * int * float = (“first”, 15, 16.8) ,[object Object],		>let lst = [1; 1; 2; 3; 5; 8; 13];; vallst : intlst= [1; 1; 2; 3; 5; 8; 13] 		>let abc = [1 .. 5];; valabc : intlst = [1, 2, 3, 4, 5]

More Related Content

What's hot

введение в паскаль
введение в паскальвведение в паскаль
введение в паскаль
isva69
 
Ayan9r1 po(1)
Ayan9r1 po(1)Ayan9r1 po(1)
Ayan9r1 po(1)
Ayan_R
 
подпрограммы в языке программирования паскаль
подпрограммы в языке программирования паскальподпрограммы в языке программирования паскаль
подпрограммы в языке программирования паскаль
Artem German
 
Типы данных
Типы данныхТипы данных
Типы данных
OlgaDask
 

What's hot (20)

введение в паскаль
введение в паскальвведение в паскаль
введение в паскаль
 
переменные в Python
переменные в Pythonпеременные в Python
переменные в Python
 
Конструирование алгоритмов
Конструирование алгоритмовКонструирование алгоритмов
Конструирование алгоритмов
 
переменные в Python
переменные в Pythonпеременные в Python
переменные в Python
 
Ayan9r1 po(1)
Ayan9r1 po(1)Ayan9r1 po(1)
Ayan9r1 po(1)
 
подпрограммы в языке программирования паскаль
подпрограммы в языке программирования паскальподпрограммы в языке программирования паскаль
подпрограммы в языке программирования паскаль
 
Java8 seminar
Java8 seminarJava8 seminar
Java8 seminar
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
Типы данных
Типы данныхТипы данных
Типы данных
 
лр5ч1 2
лр5ч1 2лр5ч1 2
лр5ч1 2
 
Способы расширения зоны влияния вашей системы автотестов
Способы расширения зоны влияния вашей системы автотестовСпособы расширения зоны влияния вашей системы автотестов
Способы расширения зоны влияния вашей системы автотестов
 
Подпрограммы
ПодпрограммыПодпрограммы
Подпрограммы
 
основы програмирования Pascal
основы програмирования Pascalосновы програмирования Pascal
основы програмирования Pascal
 
Роботы среди нас!
Роботы среди нас!Роботы среди нас!
Роботы среди нас!
 
Тодуа. Методы разработки интерпретатора языка Рефал-2
Тодуа. Методы разработки интерпретатора языка Рефал-2Тодуа. Методы разработки интерпретатора языка Рефал-2
Тодуа. Методы разработки интерпретатора языка Рефал-2
 
Смолина Пользовательские интерфейсы систем лингвистической разметки текстов
Смолина Пользовательские интерфейсы систем лингвистической разметки текстовСмолина Пользовательские интерфейсы систем лингвистической разметки текстов
Смолина Пользовательские интерфейсы систем лингвистической разметки текстов
 
X text
X textX text
X text
 
Способы записи алгоритмов
Способы записи алгоритмовСпособы записи алгоритмов
Способы записи алгоритмов
 
Общие сведения о языке программирования Паскаль
Общие сведения о языке программирования ПаскальОбщие сведения о языке программирования Паскаль
Общие сведения о языке программирования Паскаль
 
Петр Курышев, ITmozg
Петр Курышев, ITmozgПетр Курышев, ITmozg
Петр Курышев, ITmozg
 

Similar to Некоторые элементы функциональных языков программирования

Some Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming LanguagesSome Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming Languages
_ymn
 
F# функциональный язык "новой" волны
F# функциональный язык "новой" волныF# функциональный язык "новой" волны
F# функциональный язык "новой" волны
Artem Prysyazhnuk
 
Cреда программирования
Cреда программированияCреда программирования
Cреда программирования
irina8682
 
Функции в языке программирования QBasic
Функции в языке программирования QBasicФункции в языке программирования QBasic
Функции в языке программирования QBasic
kvlar
 
системное администрирование
системное администрированиесистемное администрирование
системное администрирование
splinter408
 
Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...
Dmitri Soshnikov
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
Technopark
 
Основы алгоритмического и объектно ориентированного программирования.
Основы алгоритмического и объектно ориентированного программирования.Основы алгоритмического и объектно ориентированного программирования.
Основы алгоритмического и объектно ориентированного программирования.
Елена Никонова
 
Predzazhita 2009 v16
Predzazhita 2009 v16Predzazhita 2009 v16
Predzazhita 2009 v16
guest1ba51d
 
язык программирования Go
язык программирования Goязык программирования Go
язык программирования Go
Mac'Kensi Lord
 
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
DataArt
 

Similar to Некоторые элементы функциональных языков программирования (20)

Some Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming LanguagesSome Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming Languages
 
10 инф
10 инф10 инф
10 инф
 
F# функциональный язык "новой" волны
F# функциональный язык "новой" волныF# функциональный язык "новой" волны
F# функциональный язык "новой" волны
 
F# - функциональный язык «новой» волны
F# - функциональный  язык «новой» волныF# - функциональный  язык «новой» волны
F# - функциональный язык «новой» волны
 
Cреда программирования
Cреда программированияCреда программирования
Cреда программирования
 
C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.
 
Функции в языке программирования QBasic
Функции в языке программирования QBasicФункции в языке программирования QBasic
Функции в языке программирования QBasic
 
системное администрирование
системное администрированиесистемное администрирование
системное администрирование
 
Programming history. Algorithm
Programming history. AlgorithmProgramming history. Algorithm
Programming history. Algorithm
 
Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...
 
The basic design of the PHP language
 The basic design of the PHP language The basic design of the PHP language
The basic design of the PHP language
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
 
По ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocolsПо ту сторону ООП: PEAK-Rules и PyProtocols
По ту сторону ООП: PEAK-Rules и PyProtocols
 
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAP
 
Платформа SmartActors
Платформа SmartActorsПлатформа SmartActors
Платформа SmartActors
 
Основы алгоритмического и объектно ориентированного программирования.
Основы алгоритмического и объектно ориентированного программирования.Основы алгоритмического и объектно ориентированного программирования.
Основы алгоритмического и объектно ориентированного программирования.
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
 
Predzazhita 2009 v16
Predzazhita 2009 v16Predzazhita 2009 v16
Predzazhita 2009 v16
 
язык программирования Go
язык программирования Goязык программирования Go
язык программирования Go
 
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
"Swift. Функциональное программирование", Игорь Литвиненко, DataArt
 

More from Alexander Byndyu

Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработкиКак перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Alexander Byndyu
 

More from Alexander Byndyu (20)

Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
Инфраструктура для совместной предпроктной работы IT-компаний и реального ...
 
Применение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзеПрименение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзе
 
Антихрупкость в IT или как полюбить изменения
Антихрупкость в IT или как полюбить измененияАнтихрупкость в IT или как полюбить изменения
Антихрупкость в IT или как полюбить изменения
 
Карта гипотез как метод стратегического планирования
Карта гипотез как метод стратегического планированияКарта гипотез как метод стратегического планирования
Карта гипотез как метод стратегического планирования
 
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработкиКак перейти от проектного мышления к продуктовому. Опыт из заказной разработки
Как перейти от проектного мышления к продуктовому. Опыт из заказной разработки
 
История о том, как техническое задание подменяет цель проекта
История о том, как техническое задание подменяет цель проектаИстория о том, как техническое задание подменяет цель проекта
История о том, как техническое задание подменяет цель проекта
 
Шпаргалка по IT-миру для предпринимателя
Шпаргалка по IT-миру для предпринимателяШпаргалка по IT-миру для предпринимателя
Шпаргалка по IT-миру для предпринимателя
 
Микросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияМикросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс Россия
 
IT-директор на аутсорсе
IT-директор на аутсорсеIT-директор на аутсорсе
IT-директор на аутсорсе
 
Бизнес-гибкость через микросервисную архитектуру
Бизнес-гибкость через микросервисную архитектуруБизнес-гибкость через микросервисную архитектуру
Бизнес-гибкость через микросервисную архитектуру
 
Impact Mapping на практике v2
Impact Mapping на практике v2Impact Mapping на практике v2
Impact Mapping на практике v2
 
Кнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продуктаКнопочное мышление против целостного IT-продукта
Кнопочное мышление против целостного IT-продукта
 
Пять самых важных составляющих процесса выпуска продуктов
Пять самых важных составляющих процесса выпуска продуктовПять самых важных составляющих процесса выпуска продуктов
Пять самых важных составляющих процесса выпуска продуктов
 
Пять самых важных составляющих процесса выпуска проектов
Пять самых важных составляющих процесса выпуска проектовПять самых важных составляющих процесса выпуска проектов
Пять самых важных составляющих процесса выпуска проектов
 
Час Кода 2015
Час Кода 2015Час Кода 2015
Час Кода 2015
 
Impact mapping in practice
Impact mapping in practiceImpact mapping in practice
Impact mapping in practice
 
Impact Mapping на практике
Impact Mapping на практикеImpact Mapping на практике
Impact Mapping на практике
 
Customer satisfaction для программистов
Customer satisfaction для программистовCustomer satisfaction для программистов
Customer satisfaction для программистов
 
CQRS на практике. В поиске точки масштабирования и новых метафор
CQRS на практике. В поиске точки масштабирования и новых метафорCQRS на практике. В поиске точки масштабирования и новых метафор
CQRS на практике. В поиске точки масштабирования и новых метафор
 
Как размножается Sphinx
Как размножается SphinxКак размножается Sphinx
Как размножается Sphinx
 

Некоторые элементы функциональных языков программирования