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

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

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

Репозиторий курса: http://github.com/shwars/funcpro

Как строится курс

Курс строится по следующей схеме:

Структура курса

  • Основной теоретический блок представлен предзаписанными видеолекциями, ссылками на примеры кода, набором стандартных лабораторных работ (индивидуальных или групповых) и курсового проекта. Этот блок - минимальный требуемый уровень знаний, позволяющий получить оценку “удовлетворительно” сравнительно небольшими усилиями

  • Читать лекции в синхронном режиме я не вижу большого смысла, поэтому встречаться мы будем скорее для ответов на вопросы и обсуждений. Кроме того, студенты могут в рамках этих встреч сделать доклад: либо на тему, связанную с функциональным программированием и их работой, либо изучить какую-то научную работу или подтему и рассказать про неё. Активности повышают оценку!

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

Принципы оценивания работ

При оценивании работ мы исходим из принципа, что код может быть написан студентом с помощью генеративной нейросети. Поэтому хороший работоспособный код оценивается хорошо/удовлетворительно, а более высокая оценка ставится в том случае, если студент предложил какое-то неочевидное и оригинальное решение. Рассказывая о своём проекте делайте упор на том, что хорошего вы, как человек, принесли в это решение.

План курса

Ниже в таблице приводятся ссылки на разделы из трех видео-курсов:

НеделяТемаАнгл курсРус курсФункПро на F#Доп матДомашка
YouTubeYouTubeYouTube
0Введение в курс и знакомство с преподавателемYouTubeYouTube
IЛямбда-исчисление
1Введение в функциональное программирование
2Лямбда-исчисление и комбинаторная логика как язык программированияНумералы
IIПриёмы функционального программирования на F#
3Введение в F#Part 1.*
4Функции, типы и (хвостовая) рекурсияPart 2.*ЛР
5Алгебраические структуры данных - спискиLists 1 - Lists 6Lect 2.1 - Lect 2.6Part 3.*
6Деревья и чисто-функциональные структуры данныхTrees 1 - Trees 3, Functional DS - 1Part 4.*Purely Functional Data Structures
7Приёмы функционального программирования: генераторы, замыкания, продолжения и др.Functional Data Structures 2-5Part 5.*
8Реализация функциональных языков. Комбинаторные парсеры. Eval-Apply-интерпретаторыКурс. проект
IIIФункПро и теория категорий
9Аппликативные функторы и монадыPart 6.*
10ОптикаPart 7.*Optics in Haskell, F# Plus
11Теория категорийYouTubeYouTubeWeb, PDF

Другие материалы

Также могут быть полезны следующие видео-курсы:

Материалы по теории категорий: