Иван Бибилов: Основы функционального...
description
Transcript of Иван Бибилов: Основы функционального...
Функциональное программирование
Алонзо Чёрч (14 июня 1903, Вашингтон, США — 11 августа 1995, Хадсон, Огайо, США) — выдающийся американский математик и логик.
Если сильно поковырять программирование – найдешь
математику
Теория вычислимости
Машина Тьюринга
Теория алгоритмов
Лямбда-исчисление
Математическая логика
Дискретная математика
Вычислительная сложность
Управление сложностью
Человек перестает понимать принципы работы системы, которую создал
У языков может быть разная основа в математике. У функциональных языков в основе – лямбда исчисление
Функциональные языкиMIT 6.001
Функциональное программирование
● «Нет» циклов● «Нет» ветвлений● «Нет» переменных● «Нельзя» изменять
объекты● «Нет» побочных
эффектов у функций
Вычисление факториала. Haskell
JS и функциональное программирование
JS – мультипарадигменный язык, частично поддерживает функциональное программирование
Основное понятие – функция (отображение, оператор, преобразование) в ее математичеком смысле
x.2(x+5) –λ абстракция( x.2(x+5)) 4 – λ аппликация
Функции лишены побочных эффектов и детерминированы, результат зависит только от входных данных (нет ввода / вывода, изменения глобальных переменных).
x = x + 1
Нет переменных – только константы
Функция – обычный объект, она может быть передана как параметр, возвращена из функции, присвоена переменной . Иными словами, она – First-class citizen.
Данные и код – одно целое
Функция – тоже «человек»!
Вместо циклов можно использовать рекурсию и работу с массивами
Вместо циклов можно использовать рекурсию и работу с массивами
Reduce – функция высшего порядка (как интегрирование и дифференцирование)
Закон Бенфорда. А не врет ли нам статистика?
Вычисление при помощи reduce
Reduce уже есть!
Еще есть map!
MapReduce
Array comprehensions
Каррирование – все функции могут быть от одного аргумента
В чем преимущества?
● Кеширование● Параллелизм● Тестирование● Динамический язык (код – это тоже данные)● Автоматические оптимизации● Декларативность
Декларативное (что?) и императивное (как?) программирование
Борщ — разновидность супа на основе свёклы, традиционное блюдо украинской кухни. К настоящему времени получил распространение среди многих народов восточной и центральной Европы. В частности, входит в национальные кухни России
Что?
Как?
А недостатки?
Нам нужны побочные эффекты (ввод/вывод, random)!
Оптимизация
Пользуйтесь разными инструментами!
Спасибо!