1. Сравнение императивного и декларативного подходов к программированию. Примеры языков.
  2. Функциональное программирование. Основные особенности.
  3. История ФП. Возникновение. Семейства языков.
  4. Чистые функции. Особенности программирования на чистых функциях. Функции высших порядков. Каррирование.
  5. Ленивая и энергичная (строгая) стратегии исполнения. Разновидности и примеры.
  6. Язык Haskell. Синтаксис объявления и определения функций и переменных. Встроенные выражения. Префиксная и инфиксная запись.
  7. Язык Haskell. Приоритет и ассоциативность операций. Каррирование и секции.
  8. Язык Haskell. Встроенные типы данных.
  9. Язык Haskell. Пользовательские типы данных.
  10. Язык Haskell. Pattern matching.
  11. Функциональные комбинаторы. Назначение и примеры. ФК над списками и функциями.
  12. Функциональные комбинаторы. Назначение и примеры. Свёртки.
  13. Классы типов в Haskell. Определение и примеры.
  14. Классы типов в Haskell. Моноиды и функторы
  15. Классы типов в Haskell. Монады.
  16. Монады Reader, Writer, State.
  17. Монады-трансформеры.
  18. Хвостовая рекурсия.
  19. Линзы в Haskell. Основные определения.
  20. Линзы в Haskell. Композиция линз. Законы линз.
  21. Traversal в Haskell. Связь с линзами. Законы.
  22. Язык Erlang. Основные концепции и конструкции языка.
  23. Язык Erlang. Модель акторов. Особенности ее реализации в Erlang.
  24. ФП в Java. Функции и лямбды.
  25. ФП в Java. Каррирование и монады.
  26. ФП в Java. Плюсы и минусы имеющейся реализации.
  27. Амортизированная сложность алгоритмов. Метод банкира.
  28. Амортизированная сложность алгоритмов. Метод физика.
  29. Изменяемые/неизменяемые структуры данных. Персистентное/эфемерное применение СД.
  30. Функциональные структуры данных: очередь и zipper.
  31. Функциональные структуры данных: деревья поиска.
  32. Функциональные структуры данных: кучи.
  33. Функциональные структуры данных: случайные структуры данных.
  34. Функциональные структуры данных: хеш-деревья.
  35. Метод расписаний (Scheduling) и его применение к функциональным структурам данных.
  36. Ленивое выполнение. Особенности ленивых алгоритмов.
  37. Ленивое выполнение. Работа со списками в ленивом языке.
  38. Ленивое выполнение. Потоки.
  39. Ленивое выполнение. Сильносвязные структуры данных: двусвязные списки и деревья.
  40. Изоморфизм Карри-Говарда. Базовые элементы логики на основе типов.
  41. Изоморфизм Карри-Говарда. Система доказательств и исчисление комбинаторов.
  42. Изоморфизм Карри-Говарда. Проблемы и применение.