Функциональное программирование
Санкт-Петербург / весна 2017, посмотреть все семестры

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

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

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

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

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

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

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

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

Литература

Основная:

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

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

  • Х. Барендрегт, Ламбда-исчисление, его синтаксис и семантика, М.:Мир, 1985

  • Филд А., Харрисон П., Функциональное программирование, М.:Мир, 1993

  • John Harrison, Introduction to Functional Programming http://www.cl.cam.ac.uk/teaching/Lectures/funprog-jrh-1996/ (русский перевод: http://code.google.com/p/funprog-ru/)

  • Bryan O’Sullivan, Don Stewart, and John Goerzen, Real World Haskell O’Reilly Media, 2008 http://book.realworldhaskell.org/read/

  • Simon Peyton Jones, The Implementation of Functional Programming Languages, Prentice Hall, 1987 http://research.microsoft.com/en-us/um/people/simonpj/papers/slpj-book-1987/index.htm

  • Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002 http://www.cis.upenn.edu/bcpierce/tapl (русский перевод: Бенджамин Пирс, Типы в языках программирования, Издательство: Лямбда пресс, Добросвет, 2012 http://starling.rinet.ru/~goga/tapl/tapl.pdf)

  • 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. http://www.aosabook.org/en/ghc.html

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

Видео

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

Дата и время Название Место Материалы
10 февраля
18:30–19:50
Лямбда-исчисление, лекция Таймс слайды
10 февраля
20:00–21:20
Чистое лямбда-исчисление как язык программирования, семинар Таймс файлы
17 февраля
18:30–19:50
Рекурсия и редукция, лекция Таймс слайды
17 февраля
20:00–21:20
Рекурсия и редукция, семинар Таймс файлы
24 февраля
18:30–19:50
Просто типизированное лямбда-исчисление, лекция Таймс слайды
24 февраля
20:00–21:20
Просто типизированное лямбда-исчисление, семинар Таймс файлы
03 марта
18:30–19:50
Введение в Haskell, лекция Таймс слайдыфайлы
03 марта
20:00–21:20
Введение в Haskell, семинар Таймс файлы
10 марта
18:30–19:50
Программирование на языке Haskell, лекция Таймс слайдыфайлы
10 марта
20:00–21:20
Программирование на языке Haskell, семинар Таймс файлы
17 марта
18:30–19:50
Классы типов, лекция Таймс слайдыфайлы
17 марта
20:00–21:20
Реализация представителей стандартных классов типов, семинар Таймс файлы
24 марта
18:30–19:50
Свертки, лекция Таймс, ауд. с белыми досками слайдыфайлы
24 марта
20:00–21:20
Моноиды и свертки, семинар Таймс, ауд. с белыми досками файлы
31 марта
18:30–19:50
Аппликативные функторы, лекция Таймс, ауд. с белыми досками слайды
31 марта
20:00–21:20
Аппликативные функторы, семинар Таймс, ауд. с белыми досками файлы
07 апреля
18:30–19:50
Использование аппликативных функторов, лекция Таймс, ауд. с белыми досками слайдыфайлы
07 апреля
20:00–21:20
Использование аппликативных функторов, семинар Таймс, ауд. с белыми досками файлы
14 апреля
18:30–19:50
Монады, лекция Таймс, ауд. с белыми досками слайдыфайлы
14 апреля
20:00–21:20
Монады, семинар Таймс, ауд. с белыми досками файлы
21 апреля
18:30–19:50
Использование монад, лекция Таймс, ауд. с белыми досками слайдыфайлы
21 апреля
20:00–21:20
Использование монад, семинар Таймс, ауд. с белыми досками файлы
27 апреля
18:30–19:50
Трансформеры монад, лекция Таймс, ауд. с чёрными досками слайдыфайлы
27 апреля
20:00–21:20
Трансформеры монад, семинар Таймс, ауд. с чёрными досками файлы
28 апреля
18:30–19:50
Вывод типов, лекция Таймс, ауд. с белыми досками слайды
28 апреля
20:00–21:20
Реализация алгоритма вывода типов, семинар Таймс, ауд. с белыми досками Нет