Курс знакомит слушателей с функциональным подходом к программированию, все более набирающим силу в последнее время (наблюдается взрывной рост популярности языков Erlang, Scala, F#). Ключевые свойства этого подхода - борьба со сложностью программ через использование мощных механизмов абстракции и акцент на важность математических свойств программ. Курс в значительной мере основан на знаменитейшем курсе и книге "Структура и интерпретация компьютерных программ" из MIT, однако адаптирован под ряд особенностей современного программирования и профессиональную подготовку слушателей: обсуждаемые идеи иллюстрируются как в "чистом" виде, так и в контексте типичных повседневных задач. В курсе рассматриваются следующие наиболее важные идеи из мира функционального программирования: лямбда-исчисление, рекурсивные и итеративные процессы, функции высшего порядка и замыкания, абстрактные типы данных, свёртки (данная тема особенно важна в контексте параллельного и распределенного программирования), мини-языки, модель окружений, а также дается введение в системы типов.
Страница курса и лекции с прошлого года: http://spbhug.folding-maps.org/wiki/SICP_Course.
Рассылка курса: http://groups.google.com/group/csclub-fprog.
Текст и домашнее задание: http://tinyurl.com/1-lambda-calculus
Текст и домашнее задание: http://tinyurl.com/3-higher-order-functions, http://fprog.ru/2009/issue3/ - статья "Элементы функциональных языков", разделы "Функция высшего порядка" и "Замыкание".
Вторая часть обсуждает несколько ситуаций, когда полезно или необходимо необычное представление данных, а также многогранность самого понятия "данных".
Текст лекции и домашнее задание: http://tinyurl.com/4-data-abstraction
Материалы:
Текст лекции и домашнее задание
Глава "Свертки" в статье "Элементы функциональных языков" в номере 3 журнала "Практика функционального программирования".
Книга "Vector models for data-parallel computing"
В этой лекции на примере программы для упрощения выражений иллюстрируется ряд идей, связанных с "предметными языками" (DSL):
Текст лекции.
В этой лекции вводится понятие изменяемого состояния и тождества объектов, а также показывается, как при этом разрушается подстановочная модель вычислений и взамен нее дается другая - модель окружений. Также обсуждаются общие вопросы, связанные с использованием изменяемых объектов в программах.
В лекции вводится понятие системы типов и даются начальные сведения о системе типов языка Haskell и об одном из самых важных ее элементов - обобщенных алгебраических типах (GADT).
Материалы: устаревший текст лекции, номер 3 журнала "Практика функционального программирования" - статья "Элементы функциональных языков", главы "Алгебраический тип", "Класс типов", "Вывод типов".