Читается в осенне-весеннем семестре 2011 года УНК «ИПСА» НТУУ «КПИ» в рамках
факультативного цикла «Программная инженерия».
В последнее время функциональное программирование из предмета
академических исследований превратилось в инструмент для эффективного
решения промышленных задач. Задача курса — познакомить слушателей c
основными идиомами функционального подхода и примерами их применения на
практике. Будут рассмотрены верификация программ, абстракция данных и
параллельное программирование в стиле MapReduce. Рабочие языки курса —
F# и Haskell.
Программа основана на курсах «15-150: Functional Programming»
Университета Карнеги—Меллон и «CS61A: Structure and Interpretation of
Computer Programs» Университета Беркли.
Лекторы:
Второй семестр
Расписание
Дата
|
Тема
|
Лектор
|
Аудитория
|
8.02
|
Лекция 4-1
|
В. Дёмкин
|
210-35
|
15.02
|
Лекция 4-2
|
А. Полозов
|
210-35
|
7.03
|
Лекция 4-3
|
А. Полозов
|
210-35
|
14.03
|
Лекция 4-4
|
А. Полозов
|
210-35
|
TBA
|
Лекция 4-5
|
О. Смирнов
|
210-35
|
Конспект лекций
Модуль 4. Сочетание
различных подходов
- Концепция
изменяемого состояния. Проблемы, связанные с присваиванием и способы
избавления от них в практической разработке — гостевая лекция Всеволода Дёмкина
(Grammarly)
- Чисто функциональные структуры данных. Понятие перситентности.
Семейство структур данных Zipper
- Понятие потока и его связь со списками. Ленивые вычисления. Язык
программирования Haskell
- Продолжения. Основы Continuation Passing Style. Применения:
реализация исключений и сопрограмм. Трансформация рекурсии в цикл
- Проблема побочных эффектов. Монада как абстракция последовательного
вычисления. Примеры монад: List, Maybe, IO. F# computational workflows.
Асинхронные вычисления
- Монады State и Parser. Пример использование библиотек Parsec/FParsec
для реализации DSL; профессиональный синтаксический разбор
- Классы типов. Моноиды, монады, монады со сложением (MonadPlus),
«сворачиваемые» данные (Foldable)
- Функторы и аппликативные функторы. Классы Applicative, Alternative,
Traversable — гостевая лекция Романа
Чепляка (Barclays Capital)
Модуль 5. Дополнительные
темы
- Математические основы функционального программирования.
- Бестиповое лямбда-исчисление. Порядок редукций и теорема
Черча-Россера. Теорема о неподвижной точке. Y-комбинатор. Применение:
мемоизация
- Введение в теорию типов. Обзор систем типов и алгоритмов вывода
типов, особенности типизированного лямбда-исчисления
Задачи
Первый семестр
Расписание
Дата
|
Тема
|
Лектор
|
Аудитория
|
16.09
|
Лекции 1-1 и 1-2
|
О. Смирнов
|
02-13
|
23.09
|
Лекция 1-3
|
А. Полозов
|
02-13
|
30.09
|
Лекция 2-1
|
О. Смирнов
|
62-14
|
7.10
|
Лекция 2-2
|
А. Полозов
|
147A-16
|
14.10
|
Лекция 2-3
|
О. Смирнов
|
147A-16
|
21.10
|
Лаба №1: Практика ФП.
|
А. Полозов
|
147A-16
|
28.10
|
Лекция 3-1
|
И. Веселов
|
147A-16
|
4.11
|
Лекция 3-2
|
А. Полозов
|
147А-16
|
11.11
|
Лекция 3-3
|
А. Полозов
|
147А-16
|
18.11
|
Лекция 3-4
|
О. Смирнов
|
147А-16
|
2.12
|
Лаба №2: Параллельное программирование
|
О. Смирнов
|
147A-16
|
9.12
|
Консультация
|
А. Полозов
|
147A-16
|
16.12
|
Экзамен
|
О. Смирнов
|
147A-16
|
Конспект лекций
Модуль 1.
Основы функционального программирования
- Обзор курса.
Функциональный подход к программированию. Применения ФП: верификация,
парсинг, параллелизация, «безошибочность»
- Вводная лекция. Язык
программирования F#. Порядок применения функции
- Рекурсивные и итеративные процессы, их отличие и особенности.
Вычисление с аккумулятором. Хвостовая рекурсия. Процесс декомпозиции
задачи
Модуль 2.
Практика функционального программирования
- Функция как объект
манипулирования. Функции высших порядков. Абстракция вычисления. Часто
используемые операторы над функциями. Каррирование и разрезы
- Замыкания. Проблемы реализации замыканий и их эмуляция в
императивных языках. Работа со списками, списочные комбинаторы. Пример:
LINQ
- Абстракция данных.
Алгебраические типы данных. Сопоставление с образцом. Список как
алгебраический тип данных. Деревья и операции над ними. Пример:
примитивный синтаксический разбор
Модуль 3. Параллельное
программирование
- Списочная свёртка и её
применения. Свёртка деревьев. Обобщение свёртки на алгебраические типы
данных и понятие катаморфизма — гостевая лекция Ивана Веселова (Barclays Capital)
- Моноиды.
Сбалансированные деревья и дерево отрезков. Моноидальные вычисления в
деревьях
- Сканирующие пробеги и их применения в параллельном программировании.
Сегментированные пробеги. Примеры: алгоритмы параллельного
программирования, использующие идиому пробега — выпуклая оболочка,
максимальный поток в графе, численные методы
- Списочные
гомоморфизмы. Третья теорема о гомоморфизмах. Пример: технология
MapReduce и её открытая реализация Apache Hadoop. Применения MapReduce:
индекс цитирования Web, байесовские классификаторы, пути в
графе
Задачи
- Темы 1.1-1.3,
2.1-2.3
- Темы
3.1-3.4
Лабораторные работы
- Практика функционального
программирования
- Параллельное
программирование(шаблоны кода, данные )
Экзамен
- Билеты