Функциональное программирование
Здесь описывается курс функционального программирования, который я читаю в and Московском авиационном института, Высшей школе экономики, и ранее читал в Московском физико-техническом институте, .
Для студентов, изучающих курс Функциональное и логическое программирование, будет также полезно посмотреть отдельно на курс Логическое программирование.
Репозиторий курса: http://github.com/shwars/funcpro
Как строится курс
Курс строится по следующей схеме:

Основной теоретический блок представлен предзаписанными видеолекциями, ссылками на примеры кода, набором стандартных лабораторных работ (индивидуальных или групповых) и курсового проекта. Этот блок - минимальный требуемый уровень знаний, позволяющий получить оценку “удовлетворительно” сравнительно небольшими усилиями
Читать лекции в синхронном режиме я не вижу большого смысла, поэтому встречаться мы будем скорее для ответов на вопросы и обсуждений. Кроме того, студенты могут в рамках этих встреч сделать доклад: либо на тему, связанную с функциональным программированием и их работой, либо изучить какую-то научную работу или подтему и рассказать про неё. Активности повышают оценку!
Если вы делаете что-то практическое, связанное с функциональным программиованием - это может быть диплом, или проект на работе, или пет-проект - расскажите об этом, его возможно зачесть вместо какого-то количества стандартных лаб. Интересные пет-проекты повышают оценку, поскольку они позволяют мне сделать вывод о вашем знании дисциплины.
Принципы оценивания работ
При оценивании работ мы исходим из принципа, что код может быть написан студентом с помощью генеративной нейросети. Поэтому хороший работоспособный код оценивается хорошо/удовлетворительно, а более высокая оценка ставится в том случае, если студент предложил какое-то неочевидное и оригинальное решение. Рассказывая о своём проекте делайте упор на том, что хорошего вы, как человек, принесли в это решение.
План курса
Ниже в таблице приводятся ссылки на разделы из трех видео-курсов:
| Неделя | Тема | Англ курс | Рус курс | ФункПро на F# | Доп мат | Домашка |
| YouTube | YouTube | YouTube | ||||
| 0 | Введение в курс и знакомство с преподавателем | YouTube | YouTube | |||
| I | Лямбда-исчисление | |||||
| 1 | Введение в функциональное программирование | |||||
| 2 | Лямбда-исчисление и комбинаторная логика как язык программирования | Нумералы | ||||
| II | Приёмы функционального программирования на F# | |||||
| 3 | Введение в F# | Part 1.* | ||||
| 4 | Функции, типы и (хвостовая) рекурсия | Part 2.* | ЛР | |||
| 5 | Алгебраические структуры данных - списки | Lists 1 - Lists 6 | Lect 2.1 - Lect 2.6 | Part 3.* | ||
| 6 | Деревья и чисто-функциональные структуры данных | Trees 1 - Trees 3, Functional DS - 1 | Part 4.* | Purely Functional Data Structures | ||
| 7 | Приёмы функционального программирования: генераторы, замыкания, продолжения и др. | Functional Data Structures 2-5 | Part 5.* | |||
| 8 | Реализация функциональных языков. Комбинаторные парсеры. Eval-Apply-интерпретаторы | Курс. проект | ||||
| III | ФункПро и теория категорий | |||||
| 9 | Аппликативные функторы и монады | Part 6.* | ||||
| 10 | Оптика | Part 7.* | Optics in Haskell, F# Plus | |||
| 11 | Теория категорий | YouTube | YouTube | Web, PDF | ||
Другие материалы
Также могут быть полезны следующие видео-курсы:
- Увлекательное введение в F#, ранее на Microsoft Channel 9
- Функциональное программирование, курс на Intuit.ru
Материалы по теории категорий:
- Бартош Милевский, Теория категорий для программистов (книга PDF)
- Частичный перевод на русский на habr