Иван Бибилов: Основы функционального...

49
Функциональное программирование Алонзо Чёрч (14 июня 1903, Вашингтон, США — 11 августа 1995, Хадсон, Огайо, США) — выдающийся американский математик и логик.

description

 

Transcript of Иван Бибилов: Основы функционального...

Page 1: Иван Бибилов: Основы функционального программирования

Функциональное программирование

Алонзо Чёрч (14 июня 1903, Вашингтон, США — 11 августа 1995, Хадсон, Огайо, США) — выдающийся американский математик и логик.

Page 2: Иван Бибилов: Основы функционального программирования

Если сильно поковырять программирование – найдешь

математику

Page 3: Иван Бибилов: Основы функционального программирования

Теория вычислимости

Машина Тьюринга

Теория алгоритмов

Лямбда-исчисление

Математическая логика

Дискретная математика

Вычислительная сложность

Page 4: Иван Бибилов: Основы функционального программирования

Управление сложностью

Человек перестает понимать принципы работы системы, которую создал

Page 5: Иван Бибилов: Основы функционального программирования
Page 6: Иван Бибилов: Основы функционального программирования
Page 7: Иван Бибилов: Основы функционального программирования
Page 8: Иван Бибилов: Основы функционального программирования
Page 9: Иван Бибилов: Основы функционального программирования
Page 10: Иван Бибилов: Основы функционального программирования
Page 11: Иван Бибилов: Основы функционального программирования
Page 12: Иван Бибилов: Основы функционального программирования
Page 13: Иван Бибилов: Основы функционального программирования
Page 14: Иван Бибилов: Основы функционального программирования
Page 15: Иван Бибилов: Основы функционального программирования

У языков может быть разная основа в математике. У функциональных языков в основе – лямбда исчисление

Page 16: Иван Бибилов: Основы функционального программирования

Функциональные языкиMIT 6.001

Page 17: Иван Бибилов: Основы функционального программирования
Page 18: Иван Бибилов: Основы функционального программирования
Page 19: Иван Бибилов: Основы функционального программирования

Функциональное программирование

● «Нет» циклов● «Нет» ветвлений● «Нет» переменных● «Нельзя» изменять

объекты● «Нет» побочных

эффектов у функций

Page 20: Иван Бибилов: Основы функционального программирования

Вычисление факториала. Haskell

Page 21: Иван Бибилов: Основы функционального программирования

JS и функциональное программирование

JS – мультипарадигменный язык, частично поддерживает функциональное программирование

Page 22: Иван Бибилов: Основы функционального программирования

Основное понятие – функция (отображение, оператор, преобразование) в ее математичеком смысле

x.2(x+5) –λ абстракция( x.2(x+5)) 4 – λ аппликация

Page 23: Иван Бибилов: Основы функционального программирования
Page 24: Иван Бибилов: Основы функционального программирования

Функции лишены побочных эффектов и детерминированы, результат зависит только от входных данных (нет ввода / вывода, изменения глобальных переменных).

Page 25: Иван Бибилов: Основы функционального программирования

x = x + 1

Page 26: Иван Бибилов: Основы функционального программирования

Нет переменных – только константы

Page 27: Иван Бибилов: Основы функционального программирования

Функция – обычный объект, она может быть передана как параметр, возвращена из функции, присвоена переменной . Иными словами, она – First-class citizen.

Данные и код – одно целое

Page 28: Иван Бибилов: Основы функционального программирования

Функция – тоже «человек»!

Page 29: Иван Бибилов: Основы функционального программирования

Вместо циклов можно использовать рекурсию и работу с массивами

Page 30: Иван Бибилов: Основы функционального программирования

Вместо циклов можно использовать рекурсию и работу с массивами

Page 31: Иван Бибилов: Основы функционального программирования

Reduce – функция высшего порядка (как интегрирование и дифференцирование)

Page 32: Иван Бибилов: Основы функционального программирования

Закон Бенфорда. А не врет ли нам статистика?

Page 33: Иван Бибилов: Основы функционального программирования

Вычисление при помощи reduce

Page 34: Иван Бибилов: Основы функционального программирования

Reduce уже есть!

Page 35: Иван Бибилов: Основы функционального программирования

Еще есть map!

Page 36: Иван Бибилов: Основы функционального программирования

MapReduce

Page 37: Иван Бибилов: Основы функционального программирования

Array comprehensions

Page 38: Иван Бибилов: Основы функционального программирования

Каррирование – все функции могут быть от одного аргумента

Page 39: Иван Бибилов: Основы функционального программирования

В чем преимущества?

Page 40: Иван Бибилов: Основы функционального программирования

● Кеширование● Параллелизм● Тестирование● Динамический язык (код – это тоже данные)● Автоматические оптимизации● Декларативность

Page 41: Иван Бибилов: Основы функционального программирования

Декларативное (что?) и императивное (как?) программирование

Page 42: Иван Бибилов: Основы функционального программирования

Борщ — разновидность супа на основе свёклы, традиционное блюдо украинской кухни. К настоящему времени получил распространение среди многих народов восточной и центральной Европы. В частности, входит в национальные кухни России

Что?

Как?

Page 43: Иван Бибилов: Основы функционального программирования

А недостатки?

Page 44: Иван Бибилов: Основы функционального программирования
Page 45: Иван Бибилов: Основы функционального программирования

Нам нужны побочные эффекты (ввод/вывод, random)!

Page 46: Иван Бибилов: Основы функционального программирования

Оптимизация

Page 47: Иван Бибилов: Основы функционального программирования
Page 48: Иван Бибилов: Основы функционального программирования

Пользуйтесь разными инструментами!

Page 49: Иван Бибилов: Основы функционального программирования

Спасибо!