Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Основы ФП

Основы ФП

Sergey Bushnyak

March 05, 2015
Tweet

More Decks by Sergey Bushnyak

Other Decks in Programming

Transcript

  1. История ФП 20е XX века Проблема разрешимости Алгоритмика Существует ли

    алгоритм, за конечное число шагов определяющий истинность или ложность утверждения?
  2. История ФП Машина Тьюринга • Состояние • Пошаговое исполнение •

    Таблица переходов архитектура фон Ньюмана - современные компьютеры
  3. История ФП λ - исчисление (lambda calculus) λx . x

    (λx.(λy.x)) (λf.(λg.(λx.(f(gx))))) -> λfgx.f(gx) Нет ничего кроме функций и их применений к другим функциям 0=λf.λx.x ; 1=λf.λx.f x ; 2=λf.λx.f(f x) ...
  4. История ФП Тюринг подтвердил что обе модели одинако строги в

    смысле что они решают один и тот же класс проблем 1936 В общем случае неразрешимы Редукционные машины. Вычислитель
  5. История ФП Lisp машины - Оптимизированы для ФП - Сохранение

    состояния - Автоматическая сборка мусора
  6. Особенности ФП Функции - можно использовать так же как числа

    или переменные, - передавать в качестве аргумента - возвращать как результат - чистые ( детерминированы, нет побочных эффектов) Неизменяемость (immutability) - Результат вычисления не изменяет входной набор данных - Состояние это этап вычисления
  7. Особенности ФП ФП оперирует абстракциями и взаимодействиями ООП оперирует объектами

    и их состояниями. Функции применяются для изменения состояния объекта
  8. Многообразие Динамические языки имеют множество проблем, которые снижают преимущества функционального

    языка Поэтому мы будем работать с Haskell, наиболее развитым ФЯП на сегодня со статической типизацией
  9. Haskell Чистый - Функции не имеют побочных эффектов - При

    одних и тех же входных данных будут давать один и тот же результат - Чтение/Запись это работа с побочными эффектами, для них есть специальный механизм
  10. H Haskell Ленивость - Отложенные вычисления - Можно задержать вычисления

    до того момента когда это будет действительно необходимо - Взамен расхода памяти, экономия процессорного времени
  11. Haskell REPL GHCi идет вместе с платформой - среда для

    тестов - помощник при разработке
  12. Haskell Абстракция типов Signal свой тип данных Integer стандартный тип

    данных shift - сдвигает сигнал на некоторое количество отсчетов
  13. Haskell Свои типы данных type A = B <- синоним

    data Bool = True | False <- новый тип данных data Int = -2147483648 | -2147483647 | ... | -1
  14. Haskell Свои типы данных data Bool = True | False

    все что после “=” конструкторы значений data Freq = Freq Int Int - обертка, содерж 2 значения
  15. Haskell Промежуточный итог - Функции более высокоуровневые => работа с

    прикладными понятиями - Отсутсвие побочных эффеектов - Определения = уравнение => можно говорить о свойствах и доказательсвах - Удобство рефакторинга - Легкость в организации параллельных вычислений
  16. Haskell Операции над коллекциями Никаких явных циклов map (a->b)->[a]->[b] foldl

    (a -> b -> a) -> a -> [b] -> a foldr (a -> b -> b) -> b -> [a] -> b Рекурсии и абстракции
  17. Haskell module Ms1 ( squeeze , squeezePack) where import Data.List

    -- | Уберем последовательные дубликаты -- squeeze :: String -> String -- Eq a => [a] -> [a] squeeze [] = [] squeeze (x:xs) = x : (squeeze $ dropWhile (== x) xs)
  18. Haskell Язык общего назначения - Высоконагруженные веб-порталы (Yesod, Snap) -

    Компиляторы - Высокочастоный трейдинг - Распределенные вычисления - Параллельные вычисления