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

Санкт-Петербург, весна 2021

Описание

Курс знакомит слушателей с функциональными языками программирования и техниками написания программ на этих языках. Рассматриваются отличия функционального подхода к программированию от традиционного императивного, сравниваются их сильные и слабые стороны.

Курс разделен на теоретическую и практическую части. В теоретической части слушатели знакомятся с синтаксисом и семантикой лямбда-исчисления в бестиповом и просто типизированном вариантах. Обсуждается устройство систем типов функциональных языков и, в частности, алгоритм вывода типов Хиндли-Милнера.

Практическая часть курса ориентирована на изучении языка программирования Haskell. Студенты знакомятся с ленивой и энергичной версиями операционной семантики, алгебраическими типами данных и их использованием для реализации механизма сопоставления с образцом. При изучении системы типов языка Haskell будут обсуждаться параметрический и специальный полиморфизм и, в частности, механизм классов типов, в том числе многопараметрических.

Подробно рассматриваются основные классы типов из стандартной библиотеки Haskell, в том числе полугруппы и моноиды с одной стороны, и функторы, аппликативные функторы и монады с другой. Также обсуждаются различные стратегии свертки и обхода списков, деревьев и обобщение этих стратегий в классах типов Foldable и Traversable.

Слушатели приобретут навык программирования с использованием стандартных монад. В частности будут рассмотрены проблемы ввода-вывода в чистых языках и их решение с помощью монады IO, а также работа с изменяемым состоянием с помощью монады State и родственных ей монад. Изучение трансформеров монад познакомит студентов с решением проблемы композиции монадических эффектов.

Критерии и методы выставления оценок за курс

Оценка отлично выставляется тем, кто наберет 90% баллов и более за выполнение домашних заданий, курсовой работы и тестирования. Оценка хорошо - тем, кто наберет 75% баллов. Оценка удовлетворительно (зачет) - тем, кто наберет 50% баллов. Всего можно набрать 172 балла (30 за первые три задания и 142 на Stepik). Таким образом для оценки отлично нужно набрать 154 балла, для оценки хорошо - 129 баллов, для зачета - 86 баллов. Финальный дедлайн - 13.05.2021 в 20:00, в этот день я выставлю формальные оценки. Если кому-то будет не хватать небольшого числа баллов до следующего рубежа, то в рассмотрение пойдут задания, выполненные после дедлайна. Эту процедуру вы должны инициировать сами, связавшись со мной в слэке или по почте в течении следующих суток. В пятницу 14.05.2021 в 20:00 оценки станут итоговыми.

Литература

Основная:

Дополнительная:

Видео

Видео всех лекций версии курса 2015 года можно смотреть на канале CS центра на YouTube.

Преподаватели