some elements of functional porgamming languages
DESCRIPTION
TRANSCRIPT
![Page 1: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/1.jpg)
Некоторые элементы функциональных языков
программирования
Александр Карпич
3-я конференция .NET разработчиков25 сентября 2011
![Page 2: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/2.jpg)
Содержание
• Подходы к программированию
• λ-нотация
• Основные элементы ФП
• «Зачем это нужно?»
![Page 3: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/3.jpg)
Императивное программирование
![Page 4: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/4.jpg)
Императивное программирование
• Изменение состояния с помощью последовательности команд
• Состояния изменяются присваиванием
• Программа – последовательность инструкций по изменению состояния
![Page 5: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/5.jpg)
Императивное программирование
начальное состояние
(входные данные)
конечное состояние
(результат)
![Page 6: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/6.jpg)
Функциональное программировани
е
![Page 7: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/7.jpg)
Функциональное программирование
• Нет состояний;
• Нет присваиваний;
• Нет последовательного выполнения команд;
• Подобия циклов с помощью рекурсии;
• Функции высших порядков.
![Page 8: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/8.jpg)
Достоинства ФП
• Более ясная семантика;
• Большее соответствие математическим моделям;
• Бо1льшая свобода исполнения операций.
![Page 9: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/9.jpg)
Достоинства ФП
• Выразительность и элегантность;
• Параметризация и модульность;
• Удобные способы представления бесконечных данных.
![Page 10: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/10.jpg)
Недостатки ФП
• Ввод-вывод;
• Интерактивные программы;
• Относительно высокий порог вхождения.
![Page 11: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/11.jpg)
λ -исчисление — основа ФП
• 1930-е г. – А. Чёрч разработал теорию λ-исчисления;
• 1958 г. – Дж. Маккарти изобрёл LISP;
• 1973 г. – Создан язык ML;
• 1985 г. – На основе ML создан Oсaml;
• 2002 г. – На основе OCaml создан F#
![Page 12: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/12.jpg)
λ -нотация
Пишем
λx.F[x]
чтобы определить функцию от x, которая возвращает F[x]
![Page 13: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/13.jpg)
Примеры
(λx.2x + 1) 3β-редукция:
(λx.2x + 1) 3 = 2∙3 + 1
δ-редукция:
2∙3 + 1 = 7
![Page 14: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/14.jpg)
(λx y.x + y) 1
β-редукция:
(λx y.x + y) 1 = λy.1 + y
![Page 15: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/15.jpg)
λx y.x + y = λx.(λy.x + y)
![Page 16: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/16.jpg)
(λx.x x) (λx.x x) = (λx.x x) (λx.x x)
Получили невычислимое выражение.
(λx.1)(λx.x x) (λx.x x)
= (λy.y y) (λx.x x)
![Page 17: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/17.jpg)
Основные элементы функциональных языков
программирования
• Type inference (вывод типов);
• Higher-order function (функция высшего порядка);
• Pattern matching (сопоставление с образцом);
![Page 18: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/18.jpg)
Type inference
• Нет необходимости использовать явные декларации типов;
• Автоматический вывод типов;
• Модель типизации Хиндли-Милнера;
• Работает не всегда.
![Page 19: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/19.jpg)
Higher-order function
Функция, принимающая или возвращающая функцию:
List.map (fun i -> i*i) [1; 2; 3; 4];; val it : int list = [1; 4; 9; 16]
![Page 20: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/20.jpg)
Pattern matching
let xor x y =match x, y with
| true, true -> false| true, false -> true| false, true -> true| false, false -> false
;;val xor : bool -> bool -> bool
![Page 21: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/21.jpg)
F# killer features:
• Мультипарадигменный язык с упором на функциональное программирование;
• Статическая типизация;
• Интероперабельность с .NET;
• Ленивые вычисления.
![Page 22: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/22.jpg)
Начало работы с F#
• .fs – файл с исходным кодом;
• fsi.exe – REPL;
• fsc.exe;
• Mono.
![Page 23: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/23.jpg)
Система типов F#
• Типы значений• System.byte, System.Int32, System.Char и т.д.
• Типы функций
• string -> string -> string
• Присвоение значений• let value = 15;;• let mutable value = 77;;
![Page 24: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/24.jpg)
Некоторые встроенные типыF#
• Кортеж – экземпляр класса Tuple>let tuple = “first”, 15, 16.8;;val tuple : string * int * float = (“first”, 15,
16.8)
• Список – неизменяемый тип
>let lst = [1; 1; 2; 3; 5; 8; 13];;val lst : int lst = [1; 1; 2; 3; 5; 8; 13]>let abc = [1 .. 5];;val abc : int lst = [1, 2, 3, 4, 5]
![Page 25: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/25.jpg)
Объекты и классы
type Book = val title : stringval author : stringval publishDate : DateTime
new (t, a, pd) = {title = tauthor = apublishDate = pd}
![Page 26: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/26.jpg)
Объекты и классы
type Book = val title : stringval author : stringval publishDate : DateTime
new (t:string, a:string, pd) = //произвольный код
{ title = tauthor = apublishDate = pd }
//произвольный код
![Page 27: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/27.jpg)
Объекты и классы
type Book = (title : string, author : string,) = member this.Title = titlemember this.Author = author
![Page 28: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/28.jpg)
Методы
• Начинаются с ключевого слова member
• Модификаторы public, private, internal
• Нет модификатора protected
• Поддержка перегрузки методов
![Page 29: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/29.jpg)
«Зачем это нужно?»
![Page 30: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/30.jpg)
Зачем это нужно?
• Расширить кругозор;
• Повысить производительность;
• Понять суть;
• Быть в курсе.
![Page 31: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/31.jpg)
Типичные задачи
• Обработка данных
• синтаксический разбор;• компиляторы;• Data Mining;
• Вычислительные задачи
• Параллельное программирование
![Page 32: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/32.jpg)
ФП в реальных проектах
• Twitter, Facebook;
• AutoCAD;
• Emacs;
• Maxima;
• Ericsson
![Page 33: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/33.jpg)
Проблемы ФП
![Page 34: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/34.jpg)
Проблемы
• Библиотеки;
• Обучение;
• Популярность;
• Инструментальные средства.
![Page 35: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/35.jpg)
Литература
SICP
![Page 36: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/36.jpg)
Литература
An introduction to Functional Programming through Lambda Calculus
![Page 37: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/37.jpg)
Литература
Foundations of F#
![Page 38: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/38.jpg)
Литература
Expert F#
![Page 39: Some Elements of Functional Porgamming Languages](https://reader033.vdocuments.pub/reader033/viewer/2022061214/549927b2b47959685a8b45fe/html5/thumbnails/39.jpg)
Литература
F# for Scientists