Функциональное программирование
Новосибирск / весна 2018, посмотреть все семестры

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

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

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

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

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

Формат курса

Курс проводится в интенсивном формате и разделён на две неравные части. Первая часть (9 занятий по 4 академических часа в вечернее время) пройдёт с 30 января по 8 февраля, воскресенье выходной. Вторая часть курса (еще 4 занятия) запланирована на апрель.

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

Всего за выполнение домашних заданий, курсовой работы и тестирования можно заработать 151 балл.

Оценка “отлично” выставляется тем, кто наберет 90% баллов и более (136 баллов). Оценка “хорошо” - тем, кто наберет 75% баллов (113 баллов). Оценка “удовлетворительно” (“зачет”) - тем, кто наберет 50% баллов (75 баллов).

Точное количество баллов может слегка измениться, поэтому скрупулезным студентам рекомендуется следить за процентами.

Литература

Основная:

  • Miran Lipovača, Learn You a Haskell for Great Good! A Beginner’s Guide, 2011 (русский перевод: Миран Липовача, Изучай Haskell во имя добра! Издательство: ДМК Пресс, 2012)

  • Vitaly Bragilevsky, Haskell in Depth, Manning Publications, 2019

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

общетеоретические книги по ФП:

книги о языке Haskell:

  • Will Kurt, Get Programming with Haskell, Manning Publications, 2018, 616 pages

  • Richard Bird, Thinking Functionally with Haskell, Cambridge University Press, 2014, 344 pages

  • Bryan O’Sullivan, Don Stewart, and John Goerzen, Real World Haskell O’Reilly Media, 2008

книги про типы:

  • Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002 (русский перевод: Бенджамин Пирс, Типы в языках программирования, Издательство: Лямбда пресс, Добросвет, 2012)

  • Henk Barendregt, Lambda calculi with types, Handbook of logic in computer science (vol. 2), Oxford University Press, 1993

  • Henk Barendregt, Wil Dekkers, Richard Statman, Lambda Calculus with Types, Cambridge University Press, 2013

прочие книги:

  • Саймон Марлоу. Параллельное и конкурентное программирование на языке Haskell. Издательство: ДМК Пресс, 2014

  • Simon Marlow and Simon Peyton-Jones. The Glasgow Haskell Compiler.

  • Алехандро Серано Мена, Изучаем Haskell Издательство: Питер, 2015

Хороший обзор самых новых англоязычных книг про Haskell сделал Виталий Николаевич Брагилевский. Общие итоги доступны здесь и далее по ссылкам на обзоры конкретных книг.

Видео

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

Дата и время Название Место Материалы
30 января
18:10–19:45
Лямбда-исчисление, лекция НГУ, ауд. 2128 слайды
30 января
20:00–21:35
Чистое лямбда-исчисление как язык программирования, семинар НГУ, ауд. 2128 файлы
31 января
18:10–19:45
Рекурсия и редукция, лекция НГУ, ауд. 2128 слайды
31 января
20:00–21:35
Рекурсия и редукция, семинар НГУ, ауд. 2128 файлы
01 февраля
18:10–19:45
Просто типизированное лямбда-исчисление, лекция НГУ, ауд. 2128 слайды
01 февраля
20:00–21:35
Просто типизированное лямбда-исчисление, семинар НГУ, ауд. 2128 файлы
02 февраля
18:10–19:45
Введение в Haskell, лекция НГУ, ауд. 2128 слайдыфайлы
02 февраля
20:00–21:35
Введение в Haskell, семинар НГУ, ауд. 2128 файлы
03 февраля
18:10–19:45
Программирование на языке Haskell, лекция НГУ, ауд. 2128 слайдыфайлы
03 февраля
20:00–21:35
Программирование на языке Haskell, семинар НГУ, ауд. 2128 файлы
05 февраля
18:10–19:45
Классы типов, лекция НГУ, ауд. 2128 слайдыфайлы
05 февраля
20:00–21:35
Реализация представителей стандартных классов типов, семинар НГУ, ауд. 2128 файлы
06 февраля
18:10–19:45
Свертки, лекция НГУ, ауд. 2128 слайдыфайлы
06 февраля
20:00–21:35
Моноиды и свертки, семинар НГУ, ауд. 2128 файлы
07 февраля
18:10–19:45
Аппликативные функторы, лекция НГУ, ауд. 2128 слайдыфайлы
07 февраля
20:00–21:35
Аппликативные функторы, семинар НГУ, ауд. 2128 файлы
08 февраля
18:10–19:45
Использование аппликативных функторов, лекция НГУ, ауд. 2128 слайдыфайлы
08 февраля
20:00–21:35
Использование аппликативных функторов, семинар НГУ, ауд. 2128 файлы
03 апреля
18:10–19:45
Монады, лекция НГУ, ауд. 2128 слайдыфайлы
03 апреля
20:00–21:35
Монады, семинар НГУ, ауд. 2128 файлы
04 апреля
18:10–19:45
Использование монад, лекция НГУ, ауд. 2128 слайдыфайлы
04 апреля
20:00–21:35
Использование монад, семинар НГУ, ауд. 2128 файлы
05 апреля
18:10–19:45
Трансформеры монад, лекция НГУ, ауд. 2128 слайдыфайлы
05 апреля
20:00–21:35
Трансформеры монад, семинар НГУ, ауд. 2128 файлы
06 апреля
18:10–19:45
Вывод типов, лекция НГУ, ауд. 2128 слайды
06 апреля
20:00–21:35
Реализация алгоритма вывода типов, семинар НГУ, ауд. 2128 файлы