SlideShare a Scribd company logo
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

More Related Content

What's hot

списки (2008)
списки (2008)списки (2008)
списки (2008)vivalis2010
 
Способы записи алгоритмов
Способы записи алгоритмовСпособы записи алгоритмов
Способы записи алгоритмов
Andrey Dolinin
 
Общие сведения о языке программирования Паскаль
Общие сведения о языке программирования ПаскальОбщие сведения о языке программирования Паскаль
Общие сведения о языке программирования Паскаль
Andrey Dolinin
 
Алгоритмическая конструкция Повторение
Алгоритмическая конструкция ПовторениеАлгоритмическая конструкция Повторение
Алгоритмическая конструкция Повторение
Andrey Dolinin
 
Расстаемся с мифами о ФП
Расстаемся с мифами о ФП Расстаемся с мифами о ФП
Расстаемся с мифами о ФП
Ivan Grishaev
 
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)
bddmoscow
 
Урок 4. "Завязывание узлов". Классы
Урок 4. "Завязывание узлов". КлассыУрок 4. "Завязывание узлов". Классы
Урок 4. "Завязывание узлов". Классы
Система дистанционного обучения MyDLS
 
к.р. информатика (10 класс)
к.р. информатика (10 класс)к.р. информатика (10 класс)
к.р. информатика (10 класс)
Aliya Abulkina
 
Урок 8. Введение в редукцию графов
Урок 8. Введение в редукцию графовУрок 8. Введение в редукцию графов
Урок 8. Введение в редукцию графов
Система дистанционного обучения MyDLS
 
паскаль язык структурного программирования
паскаль   язык структурного программированияпаскаль   язык структурного программирования
паскаль язык структурного программированияЕлена Ключева
 
10кл общие сведения о языке программирования паскаль
10кл общие сведения о языке программирования паскаль10кл общие сведения о языке программирования паскаль
10кл общие сведения о языке программирования паскаль
Anna_Malina
 
Презентация. Основы Pascal
Презентация. Основы PascalПрезентация. Основы Pascal
Презентация. Основы PascalEvgen67
 
fp intro
fp introfp intro
fp intro
Ivan Glushkov
 
введение в паскаль
введение в паскальвведение в паскаль
введение в паскальisva69
 

What's hot (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
 
введение в паскаль
введение в паскальвведение в паскаль
введение в паскаль
 

Viewers also liked

printime esitlus
printime esitlusprintime esitlus
printime esitlusAliza11
 
Printime esitlust
Printime esitlustPrintime esitlust
Printime esitlustaljonasa
 

Viewers also liked (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
 

Similar to Some Elements of Functional Porgamming Languages

Некоторые элементы функциональных языков программирования
Некоторые элементы функциональных языков программированияНекоторые элементы функциональных языков программирования
Некоторые элементы функциональных языков программирования
Alexander Byndyu
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Yandex
 
Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Dmitri Soshnikov
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФП
Alexander Granin
 
Александр Гладыш — Lua
Александр Гладыш — LuaАлександр Гладыш — Lua
Александр Гладыш — Lua
Yury Yurevich
 
Декларативно функциональный стиль в PHP
Декларативно функциональный стиль в PHPДекларативно функциональный стиль в PHP
Декларативно функциональный стиль в PHP
Parallels
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
Levon Avakyan
 
ОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык CОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык C
Vladimir Parfinenko
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
 
Функции в языке программирования QBasic
Функции в языке программирования QBasicФункции в языке программирования QBasic
Функции в языке программирования QBasickvlar
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
Alexander Gornik
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
GetDev.NET
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
Andrey Dolinin
 
Павел Павлов - 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
 
1 Презентация функциональное программирование
1 Презентация функциональное программирование1 Презентация функциональное программирование
1 Презентация функциональное программирование
STEP Computer Academy (Zaporozhye)
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C code
Denis Efremov
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
Positive Hack Days
 

Similar to 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