Иван Бибилов: Основы функционального...
description
Transcript of Иван Бибилов: Основы функционального...
![Page 1: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/1.jpg)
Функциональное программирование
Алонзо Чёрч (14 июня 1903, Вашингтон, США — 11 августа 1995, Хадсон, Огайо, США) — выдающийся американский математик и логик.
![Page 2: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/2.jpg)
Если сильно поковырять программирование – найдешь
математику
![Page 3: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/3.jpg)
Теория вычислимости
Машина Тьюринга
Теория алгоритмов
Лямбда-исчисление
Математическая логика
Дискретная математика
Вычислительная сложность
![Page 4: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/4.jpg)
Управление сложностью
Человек перестает понимать принципы работы системы, которую создал
![Page 5: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/5.jpg)
![Page 6: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/6.jpg)
![Page 7: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/7.jpg)
![Page 8: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/8.jpg)
![Page 9: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/9.jpg)
![Page 10: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/10.jpg)
![Page 11: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/11.jpg)
![Page 12: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/12.jpg)
![Page 13: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/13.jpg)
![Page 14: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/14.jpg)
![Page 15: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/15.jpg)
У языков может быть разная основа в математике. У функциональных языков в основе – лямбда исчисление
![Page 16: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/16.jpg)
Функциональные языкиMIT 6.001
![Page 17: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/17.jpg)
![Page 18: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/18.jpg)
![Page 19: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/19.jpg)
Функциональное программирование
● «Нет» циклов● «Нет» ветвлений● «Нет» переменных● «Нельзя» изменять
объекты● «Нет» побочных
эффектов у функций
![Page 20: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/20.jpg)
Вычисление факториала. Haskell
![Page 21: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/21.jpg)
JS и функциональное программирование
JS – мультипарадигменный язык, частично поддерживает функциональное программирование
![Page 22: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/22.jpg)
Основное понятие – функция (отображение, оператор, преобразование) в ее математичеком смысле
x.2(x+5) –λ абстракция( x.2(x+5)) 4 – λ аппликация
![Page 23: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/23.jpg)
![Page 24: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/24.jpg)
Функции лишены побочных эффектов и детерминированы, результат зависит только от входных данных (нет ввода / вывода, изменения глобальных переменных).
![Page 25: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/25.jpg)
x = x + 1
![Page 26: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/26.jpg)
Нет переменных – только константы
![Page 27: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/27.jpg)
Функция – обычный объект, она может быть передана как параметр, возвращена из функции, присвоена переменной . Иными словами, она – First-class citizen.
Данные и код – одно целое
![Page 28: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/28.jpg)
Функция – тоже «человек»!
![Page 29: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/29.jpg)
Вместо циклов можно использовать рекурсию и работу с массивами
![Page 30: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/30.jpg)
Вместо циклов можно использовать рекурсию и работу с массивами
![Page 31: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/31.jpg)
Reduce – функция высшего порядка (как интегрирование и дифференцирование)
![Page 32: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/32.jpg)
Закон Бенфорда. А не врет ли нам статистика?
![Page 33: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/33.jpg)
Вычисление при помощи reduce
![Page 34: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/34.jpg)
Reduce уже есть!
![Page 35: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/35.jpg)
Еще есть map!
![Page 36: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/36.jpg)
MapReduce
![Page 37: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/37.jpg)
Array comprehensions
![Page 38: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/38.jpg)
Каррирование – все функции могут быть от одного аргумента
![Page 39: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/39.jpg)
В чем преимущества?
![Page 40: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/40.jpg)
● Кеширование● Параллелизм● Тестирование● Динамический язык (код – это тоже данные)● Автоматические оптимизации● Декларативность
![Page 41: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/41.jpg)
Декларативное (что?) и императивное (как?) программирование
![Page 42: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/42.jpg)
Борщ — разновидность супа на основе свёклы, традиционное блюдо украинской кухни. К настоящему времени получил распространение среди многих народов восточной и центральной Европы. В частности, входит в национальные кухни России
Что?
Как?
![Page 43: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/43.jpg)
А недостатки?
![Page 44: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/44.jpg)
![Page 45: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/45.jpg)
Нам нужны побочные эффекты (ввод/вывод, random)!
![Page 46: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/46.jpg)
Оптимизация
![Page 47: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/47.jpg)
![Page 48: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/48.jpg)
Пользуйтесь разными инструментами!
![Page 49: Иван Бибилов: Основы функционального программирования](https://reader030.fdocuments.net/reader030/viewer/2022013114/5495edfcb47959c07a8b465d/html5/thumbnails/49.jpg)
Спасибо!