Бакалавриат
2024/2025
Функциональное программирование
Статус:
Курс по выбору (Компьютерные науки и анализ данных)
Направление:
01.03.02. Прикладная математика и информатика
Где читается:
Факультет компьютерных наук
Когда читается:
3-й курс, 1, 2 модуль
Формат изучения:
без онлайн-курса
Охват аудитории:
для своего кампуса
Язык:
русский
Кредиты:
5
Программа дисциплины
Аннотация
Настоящая дисциплина относится к профессиональному циклу, дисциплинам базовой части профиля. Для специализации «Распределенные системы» настоящая дисциплина является базовой. Изучение данной дисциплины базируется на знании курса “Сложность вычислений и логика в теоретической информатике”.
Цель освоения дисциплины
- Освоение теоретической базы функционального программирования (начала теории типов, лямбда-исчисление, начала теории категорий).
- Овладение техникой программирования на языке Haskell.
Планируемые результаты обучения
- Студент владеет общей информацией об императивном и функциональном стилях программирования, их сильных и слабых сторонах, умеет выбирать правильный стиль в зависимости от задачи.
- Студент знает теоретические основы функционального программирования (лямбда-исчисление, начала теории категорий и проч.).
- Студент разрабатывает новые библиотеки на языке Haskell.
- Студент решает задачи на программирование на языке Haskell.
- Студент создает код на функциональном языке, корректность которого формально доказана (верифицирована).
Содержание учебной дисциплины
- Типизованное лямбда-исчисление
- Нормализуемость и конфлюэнтность
- Императивное и функциональное программирование. Элементы функционального программирования в императивных языках
- Язык и среда разработки Haskell: установка и настройка
- Основы программирования на языке Haskell
- Типы данных в Haskell
- "Ленивые" и "ретивые" вычисления
- Монады и их использование для ввода-вывода
- Соответствие Карри - Говарда. Верификация программ и математических утверждений. Система Coq
Элементы контроля
- Самостоятельная работа (мини-проект)При желании студенты согласовывают с семинаристом задачу для индивидуальной самостоятельной работы. При этом предполагаются решение достаточно сложной задачи по программированию и самостоятельное получение студентом недостающих сведений. Самостоятельная работа должна быть сдана до 15-го декабря.
- Домашнее заданиеДомашнее задание выдается частями приблизительно раз в две недели; при выдаче каждой части указывается срок ее сдачи. Все задания письменные.
- Контрольная работаПисьменная Контрольная работа проводится в начале второго модуля. Допускается использование собственных записей студента и явно разрешенных локальных справочных систем.
- ЭкзаменПисьменный экзамен проводится в конце курса. Допускается использование собственных записей студента и явно разрешенных локальных справочных систем.
Промежуточная аттестация
- 2024/2025 2nd moduleИтог = ОКРУГЛ (min(10, 0.15 * Сам + 0.23 * КР + 0.27 * ДЗ + 0.5 * Экз)).
Список литературы
Рекомендуемая основная литература
- Barendregt, H., Dekkers, W., Statman, R. Lambda calculus with types. – Cambridge University Press, 2013. – 856 pp.
Рекомендуемая дополнительная литература
- Lipovaca M. Learn you a Haskell for great good!: a beginner's guide. – No Starch Press, 2011. – 404 pp.