SlideShare ist ein Scribd-Unternehmen logo
1 von 40
3-я конференция .NET разработчиков
25 сентября 2011


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

                              Александр Карпич
Содержание

• Подходы к программированию
• λ-нотация
• Основные элементы ФП
• «Зачем это нужно?»
Императивное
программирование
Императивное
       программирование

• Изменение состояния с помощью
  последовательности команд
• Состояния изменяются присваиванием
• Программа – последовательность
  инструкций по изменению состояния
Императивное
         программирование




начальное состояние   конечное состояние
  (входные данные)        (результат)
Функциональное
программирование
Функциональное
       программирование

• Нет состояний;
• Нет присваиваний;
• Нет последовательного выполнения команд;
• Подобия циклов с помощью рекурсии;
• Функции высших порядков.
Достоинства ФП

• Более ясная семантика;
• Большее соответствие математическим
  моделям;
•   льшая свобода исполнения операций.
Достоинства ФП

• Выразительность и элегантность;
• Параметризация и модульность;
• Удобные способы представления
  бесконечных данных.
Недостатки ФП
• Ввод-вывод;
• Интерактивные программы;
• Относительно высокий порог вхождения.
λ -исчисление — основа ФП
• 1930-е г. – А. Чѐрч разработал теорию λ-
  исчисления;
• 1958 г. – Дж. Маккарти изобрѐл LISP;
• 1973 г. – Создан язык ML;
• 1985 г. – На основе ML создан Oсaml;
• 2002 г. – На основе OCaml создан F#
λ -нотация
Пишем

                λ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) (λx.x x)
Основные элементы функциональных
     языков программирования

• Type inference (вывод типов);
• Higher-order function (функция высшего
  порядка);
• Pattern matching (сопоставление с
  образцом);
Type inference
• Нет необходимости использовать явные
  декларации типов;
• Автоматический вывод типов;
• Модель типизации Хиндли-Милнера;
• Работает не всегда.
Higher-order function
Функция, принимающая или возвращающая
функцию:


    List.map (fun i -> i*i) [1; 2; 3; 4];;
    val it : int list = [1; 4; 9; 16]
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
F# killer features:
• Мультипарадигменный язык с упором на
  функциональное программирование;
• Статическая типизация;
• Интероперабельность с .NET;
• Ленивые вычисления.
Начало работы с F#
• .fs – файл с исходным кодом;
• fsi.exe – REPL;
• fsc.exe;
• Mono.
Система типов F#
• Типы значений
  • System.byte, System.Int32, System.Char и т.д.

• Типы функций
  • string -> string -> string

• Присвоение значений
  • let value = 15;;
  • let mutable value = 77;;
Некоторые встроенные типы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]
Объекты и классы
type Book =
     val title : string
     val author : string
     val publishDate : DateTime
new (t, a, pd) = {
     title = t
     author = a
     publishDate = pd}
Объекты и классы
type Book =
      val title : string
      val author : string
      val publishDate : DateTime
new (t:string, a:string, pd) =
//произвольный код
       { title = t
       author = a
       publishDate = pd }
//произвольный код
Объекты и классы

type Book = (title : string,
         author : string,) =
member this.Title = title
member 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

Weitere ähnliche Inhalte

Was ist angesagt?

списки (2008)
списки (2008)списки (2008)
списки (2008)
vivalis2010
 
паскаль язык структурного программирования
паскаль   язык структурного программированияпаскаль   язык структурного программирования
паскаль язык структурного программирования
Елена Ключева
 
Презентация. Основы Pascal
Презентация. Основы PascalПрезентация. Основы Pascal
Презентация. Основы Pascal
Evgen67
 
введение в паскаль
введение в паскальвведение в паскаль
введение в паскаль
isva69
 

Was ist angesagt? (16)

списки (2008)
списки (2008)списки (2008)
списки (2008)
 
Способы записи алгоритмов
Способы записи алгоритмовСпособы записи алгоритмов
Способы записи алгоритмов
 
Общие сведения о языке программирования Паскаль
Общие сведения о языке программирования ПаскальОбщие сведения о языке программирования Паскаль
Общие сведения о языке программирования Паскаль
 
Алгоритмическая конструкция Повторение
Алгоритмическая конструкция ПовторениеАлгоритмическая конструкция Повторение
Алгоритмическая конструкция Повторение
 
Расстаемся с мифами о ФП
Расстаемся с мифами о ФП Расстаемся с мифами о ФП
Расстаемся с мифами о ФП
 
Online learning - Apache Spark alternatives: Vowpal Wabbit. (18.06.2015)
Online learning - Apache Spark alternatives: Vowpal Wabbit. (18.06.2015)Online learning - Apache Spark alternatives: Vowpal Wabbit. (18.06.2015)
Online learning - Apache Spark alternatives: Vowpal Wabbit. (18.06.2015)
 
Урок 4. "Завязывание узлов". Классы
Урок 4. "Завязывание узлов". КлассыУрок 4. "Завязывание узлов". Классы
Урок 4. "Завязывание узлов". Классы
 
к.р. информатика (10 класс)
к.р. информатика (10 класс)к.р. информатика (10 класс)
к.р. информатика (10 класс)
 
87
8787
87
 
Урок 8. Введение в редукцию графов
Урок 8. Введение в редукцию графовУрок 8. Введение в редукцию графов
Урок 8. Введение в редукцию графов
 
паскаль язык структурного программирования
паскаль   язык структурного программированияпаскаль   язык структурного программирования
паскаль язык структурного программирования
 
структура программы
структура программыструктура программы
структура программы
 
10кл общие сведения о языке программирования паскаль
10кл общие сведения о языке программирования паскаль10кл общие сведения о языке программирования паскаль
10кл общие сведения о языке программирования паскаль
 
Презентация. Основы Pascal
Презентация. Основы PascalПрезентация. Основы Pascal
Презентация. Основы Pascal
 
fp intro
fp introfp intro
fp intro
 
введение в паскаль
введение в паскальвведение в паскаль
введение в паскаль
 

Andere mochten auch

Andere mochten auch (6)

printime esitlus
printime esitlusprintime esitlus
printime esitlus
 
2011 NASA Open Source Summit - Patrick Hogan
2011 NASA Open Source Summit - Patrick Hogan2011 NASA Open Source Summit - Patrick Hogan
2011 NASA Open Source Summit - Patrick Hogan
 
Printime esitlust
Printime esitlustPrintime esitlust
Printime esitlust
 
2011 NASA Open Source Summit - David Wheeler
2011 NASA Open Source Summit - David Wheeler2011 NASA Open Source Summit - David Wheeler
2011 NASA Open Source Summit - David Wheeler
 
Fusion
FusionFusion
Fusion
 
2011 NASA Open Source Summit - Forge.mil
2011 NASA Open Source Summit - Forge.mil2011 NASA Open Source Summit - Forge.mil
2011 NASA Open Source Summit - Forge.mil
 

Ähnlich wie Some Elements of Functional Porgamming Languages

Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...
Dmitri Soshnikov
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
 
Функции в языке программирования QBasic
Функции в языке программирования QBasicФункции в языке программирования QBasic
Функции в языке программирования QBasic
kvlar
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
ScalaNsk
 
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
ScalaNsk
 
Back to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодняBack to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодня
Tech Talks @NSU
 

Ähnlich wie Some Elements of Functional Porgamming Languages (20)

Некоторые элементы функциональных языков программирования
Некоторые элементы функциональных языков программированияНекоторые элементы функциональных языков программирования
Некоторые элементы функциональных языков программирования
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
 
Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФП
 
Александр Гладыш — Lua
Александр Гладыш — LuaАлександр Гладыш — Lua
Александр Гладыш — Lua
 
Декларативно функциональный стиль в PHP
Декларативно функциональный стиль в PHPДекларативно функциональный стиль в PHP
Декларативно функциональный стиль в PHP
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
ОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык CОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык C
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
Функции в языке программирования QBasic
Функции в языке программирования QBasicФункции в языке программирования QBasic
Функции в языке программирования QBasic
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
Python
PythonPython
Python
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
 
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
 
Back to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодняBack to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодня
 
1 Презентация функциональное программирование
1 Презентация функциональное программирование1 Презентация функциональное программирование
1 Презентация функциональное программирование
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C code
 

Some Elements of Functional Porgamming Languages

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