Город: Санкт-Петербург Новосибирск Казань Язык: Русский English

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

Запишитесь на курс, чтобы получать уведомления и иметь возможность сдавать домашние задания. Для записи требуется регистрация на сайте.
Перейти к регистрации Войти

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

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

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

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

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

Формат курса

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

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

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

Литература

Основная

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

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

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

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

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

  • Will Kurt, Get Programming with Haskell, Manning Publications, 2018, 616 pages (русский перевод: Уилл Курт, Программируй на Haskell, М.:ДМК Пресс, 2019)

  • 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 года можно смотреть на канале CS центра на YouTube.

Дата и время Название Место Материалы
31 января
18:10–19:45
Лямбда-исчисление, лекция НГУ, ауд. 2128 слайдывидео
31 января
20:00–21:35
Чистое лямбда-исчисление как язык программирования, семинар НГУ, ауд. 2128 файлы
01 февраля
18:10–19:45
Рекурсия и редукция, лекция НГУ, ауд. 2128 слайдывидео
01 февраля
20:00–21:35
Рекурсия и редукция, семинар НГУ, ауд. 2128 файлы
03 февраля
18:10–19:45
Просто типизированное лямбда-исчисление, лекция НГУ, ауд. 2128 слайдывидео
03 февраля
20:00–21:35
Просто типизированное лямбда-исчисление, семинар НГУ, ауд. 2128 файлы
04 февраля
18:10–19:45
Введение в Haskell, лекция НГУ, ауд. 2128 слайдывидео
04 февраля
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 файлы
25 марта
18:10–19:45
Аппликативные функторы, лекция НГУ, ауд. 2128 Нет
25 марта
20:00–21:35
Аппликативные функторы, семинар НГУ, ауд. 2128 Нет
26 марта
18:10–19:45
Использование аппликативных функторов, лекция НГУ, ауд. 2128 Нет
26 марта
20:00–21:35
Использование аппликативных функторов, семинар НГУ, ауд. 2128 Нет
27 марта
18:10–19:45
Монады, лекция НГУ, ауд. 2128 Нет
27 марта
20:00–21:35
Монады, семинар НГУ, ауд. 2128 Нет
28 марта
18:10–19:45
Использование монад, лекция НГУ, ауд. 2128 Нет
28 марта
20:00–21:35
Использование монад, семинар НГУ, ауд. 2128 Нет
30 марта
18:10–19:45
Трансформеры монад, лекция НГУ, ауд. 2128 Нет
30 марта
20:00–21:35
Трансформеры монад, семинар НГУ, ауд. 2128 Нет
31 марта
18:10–19:45
Вывод типов, лекция НГУ, ауд. 2128 Нет
31 марта
20:00–21:35
Реализация алгоритма вывода типов, семинар НГУ, ауд. 2128 Нет