Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Функциональное
программирование
Бибилов Иван Владимирович

email

bibilov@yandex-team.ru
Алонзо Чёрч (14 июня 1903, Вашингтон, США —
11 августа 1995, Хадсон, Огайо, США) —
выдающийся американский математик и лог...
Начнем издалека
Зачем нужны и что делают
программисты?
Сильный ИИ еще не создан –
компьютеры не понимают
естественный язык
Программисты пишут программы на
языках программирования
Ада Лавлейс (1815-1852) – первый программист,
графиня, дочь поэта Джорджа Байрона

Мы и «гуманитарии», и
«технари»
Вычислительная сложность
Теория вычислимости
Теория алгоритмов
Машина Тьюринга
Математическая логика
Лямбда-исчисление
Дис...
Языки программирования бывают разные
ДРАКОН (Дружелюбный русский алгоритмический язык,
который обеспечивает наглядность)
Разнообразие языков обусловлено желанием быстро
писать эффективные, легко модифицируемые и понятные
программы
Управление сложностью

Человек перестает понимать принципы работы системы,
которую создал
У языков может быть разная основа в
математике. У функциональных языков в
основе – лямбда исчисление
Функциональные языки
MIT 6.001
Функциональное программирование
●

«Нет» циклов

●

«Нет» ветвлений

●

«Нет» переменных

●

●

«Нельзя» изменять
объекты
...
Вычисление факториала. Haskell
Основное понятие – функция (отображение, оператор,
преобразование) в ее математичеком смысле

λx.2(x+5) – абстракция
(λx.2...
Функции лишены побочных эффектов и
детерминированы, результат зависит только от
входных данных (нет ввода / вывода, измене...
x=x+1
Нет переменных – только константы
Функция – обычный объект, она может быть передана как
параметр, возвращена из функции, присвоена
переменной . Иными словам...
Функция – тоже «человек»!
Вместо циклов можно использовать рекурсию и
работу с массивами
Вместо циклов можно использовать рекурсию и
работу с массивами
Reduce – функция высшего порядка (как
интегрирование и дифференцирование)
Закон Бенфорда. А не врет ли нам
статистика?
Вычисление при помощи reduce
Reduce уже есть!
Еще есть map!
MapReduce
Array comprehensions
Каррирование – все функции могут быть
от одного аргумента
В чем преимущества?
●

Кеширование

●

Параллелизм

●

Ленивые вычисления

●

Тестирование

●

Динамический язык (код – это тоже данные)

●

А...
Декларативное (что?) и
императивное (как?)
программирование
Борщ — разновидность супа на основе
свёклы, традиционное блюдо
украинской кухни. К настоящему
времени получил распростране...
А недостатки?
Нам нужны побочные эффекты
(ввод/вывод, random)!
Оптимизация
Пользуйтесь разными инструментами!
Спасибо!
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Bibilov fp urfu_2013
Upcoming SlideShare
Loading in …5
×

Bibilov fp urfu_2013

661 views

Published on

Иван Бибилов на Я.Студенте в УрФУ.
Основы функциоального программирования

Published in: Education
  • Be the first to comment

Bibilov fp urfu_2013

  1. 1. Функциональное программирование Бибилов Иван Владимирович email bibilov@yandex-team.ru
  2. 2. Алонзо Чёрч (14 июня 1903, Вашингтон, США — 11 августа 1995, Хадсон, Огайо, США) — выдающийся американский математик и логик.
  3. 3. Начнем издалека
  4. 4. Зачем нужны и что делают программисты?
  5. 5. Сильный ИИ еще не создан – компьютеры не понимают естественный язык
  6. 6. Программисты пишут программы на языках программирования
  7. 7. Ада Лавлейс (1815-1852) – первый программист, графиня, дочь поэта Джорджа Байрона Мы и «гуманитарии», и «технари»
  8. 8. Вычислительная сложность Теория вычислимости Теория алгоритмов Машина Тьюринга Математическая логика Лямбда-исчисление Дискретная математика
  9. 9. Языки программирования бывают разные
  10. 10. ДРАКОН (Дружелюбный русский алгоритмический язык, который обеспечивает наглядность)
  11. 11. Разнообразие языков обусловлено желанием быстро писать эффективные, легко модифицируемые и понятные программы
  12. 12. Управление сложностью Человек перестает понимать принципы работы системы, которую создал
  13. 13. У языков может быть разная основа в математике. У функциональных языков в основе – лямбда исчисление
  14. 14. Функциональные языки MIT 6.001
  15. 15. Функциональное программирование ● «Нет» циклов ● «Нет» ветвлений ● «Нет» переменных ● ● «Нельзя» изменять объекты «Нет» побочных эффектов у функций
  16. 16. Вычисление факториала. Haskell
  17. 17. Основное понятие – функция (отображение, оператор, преобразование) в ее математичеком смысле λx.2(x+5) – абстракция (λx.2(x+5)) 4 – аппликация
  18. 18. Функции лишены побочных эффектов и детерминированы, результат зависит только от входных данных (нет ввода / вывода, изменения глобальных переменных).
  19. 19. x=x+1
  20. 20. Нет переменных – только константы
  21. 21. Функция – обычный объект, она может быть передана как параметр, возвращена из функции, присвоена переменной . Иными словами, она – First-class citizen. Данные и код – одно целое
  22. 22. Функция – тоже «человек»!
  23. 23. Вместо циклов можно использовать рекурсию и работу с массивами
  24. 24. Вместо циклов можно использовать рекурсию и работу с массивами
  25. 25. Reduce – функция высшего порядка (как интегрирование и дифференцирование)
  26. 26. Закон Бенфорда. А не врет ли нам статистика?
  27. 27. Вычисление при помощи reduce
  28. 28. Reduce уже есть!
  29. 29. Еще есть map!
  30. 30. MapReduce
  31. 31. Array comprehensions
  32. 32. Каррирование – все функции могут быть от одного аргумента
  33. 33. В чем преимущества?
  34. 34. ● Кеширование ● Параллелизм ● Ленивые вычисления ● Тестирование ● Динамический язык (код – это тоже данные) ● Автоматические оптимизации ● Декларативность
  35. 35. Декларативное (что?) и императивное (как?) программирование
  36. 36. Борщ — разновидность супа на основе свёклы, традиционное блюдо украинской кухни. К настоящему времени получил распространение среди многих народов восточной и центральной Европы. В частности, входит в национальные кухни России Что? Как?
  37. 37. А недостатки?
  38. 38. Нам нужны побочные эффекты (ввод/вывод, random)!
  39. 39. Оптимизация
  40. 40. Пользуйтесь разными инструментами!
  41. 41. Спасибо!

×