3-я конференция .NET разработчиков25 сентября 2011             Некоторые элементы            функциональных языков        ...
Содержание• Подходы к программированию• λ-нотация• Основные элементы ФП• «Зачем это нужно?»
Императивноепрограммирование
Императивное       программирование• Изменение состояния с помощью  последовательности команд• Состояния изменяются присва...
Императивное         программированиеначальное состояние   конечное состояние  (входные данные)        (результат)
Функциональноепрограммирование
Функциональное       программирование• Нет состояний;• Нет присваиваний;• Нет последовательного выполнения команд;• Подоби...
Достоинства ФП• Более ясная семантика;• Большее соответствие математическим  моделям;•   льшая свобода исполнения операций.
Достоинства ФП• Выразительность и элегантность;• Параметризация и модульность;• Удобные способы представления  бесконечных...
Недостатки ФП• Ввод-вывод;• Интерактивные программы;• Относительно высокий порог вхождения.
λ -исчисление — основа ФП• 1930-е г. – А. Чѐрч разработал теорию λ-  исчисления;• 1958 г. – Дж. Маккарти изобрѐл LISP;• 19...
λ -нотацияПишем                λx.F[x]чтобы определить функцию от x, котораявозвращает F[x]
Примеры              (λ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.x x) (λx.x x) = (λy.y y) (λx.x x)          = (λx.x x) (λx.x x)Получили невычислимое выражение.       (λx.1)(λx.x x) (λ...
Основные элементы функциональных     языков программирования• Type inference (вывод типов);• Higher-order function (функци...
Type inference• Нет необходимости использовать явные  декларации типов;• Автоматический вывод типов;• Модель типизации Хин...
Higher-order functionФункция, принимающая или возвращающаяфункцию:    List.map (fun i -> i*i) [1; 2; 3; 4];;    val it : i...
Pattern matchinglet xor x y =   match x, y with       | true, true -> false       | true, false -> true       | false, tru...
F# killer features:• Мультипарадигменный язык с упором на  функциональное программирование;• Статическая типизация;• Интер...
Начало работы с F#• .fs – файл с исходным кодом;• fsi.exe – REPL;• fsc.exe;• Mono.
Система типов F#• Типы значений  • System.byte, System.Int32, System.Char и т.д.• Типы функций  • string -> string -> stri...
Некоторые встроенные типыF#• Кортеж – экземпляр класса Tuple    >let tuple = “first”, 15, 16.8;;    val tuple : string * i...
Объекты и классыtype Book =     val title : string     val author : string     val publishDate : DateTimenew (t, a, pd) = ...
Объекты и классыtype Book =      val title : string      val author : string      val publishDate : DateTimenew (t:string,...
Объекты и классыtype Book = (title : string,         author : string,) =member this.Title = titlemember this.Author = author
Методы• Начинаются с ключевого слова member• Модификаторы public, private, internal• Нет модификатора protected• Поддержка...
«Зачем это нужно?»
Зачем это нужно?• Расширить кругозор;• Повысить производительность;• Понять суть;• Быть в курсе.
Типичные задачи• Обработка данных    • синтаксический разбор;    • компиляторы;    • Data Mining;• Вычислительные задачи• ...
ФП в реальных проектах• Twitter, Facebook;• AutoCAD;• Emacs;• Maxima;• Ericsson
Проблемы ФП
Проблемы• Библиотеки;• Обучение;• Популярность;• Инструментальные средства.
Литература         SICP
Литература       An introduction to       Functional       Programming       through Lambda       Calculus
Литература      Foundations of F#
Литература        Expert F#
Литература       F# for Scientists
Спасибо за внимание    Александр Карпич   avkarpich@gmail.com          @_ymn
Upcoming SlideShare
Loading in …5
×

Some Elements of Functional Porgamming Languages

309 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
309
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Some Elements of Functional Porgamming Languages

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

×