Information

Created: 08.02.2010 | Level: specialist | Access: free
Курс знакомит слушателей с парадигмой функционального программирования, в которой решение задач сводится к описанию функций, перерабатывающих некоторые входные данные в выходные и строящихся из более простых функций на основе принципов функциональной абстракции и аппликации. Рассматриваются теоретические основы функционального программирования (лямбда-исчисление, комбинаторная логика, вопросы вычислимости), на примере функционального подхода дается представление о некоторых теоретических разделах компьютерных наук (семантика языков программирования, доказательство программ). С другой стороны курс содержит значительную практическую составляющую, основанную на промышленном языке программирования F# (входит в состав Microsoft Visual Studio 2010), рассматриваются вопросы использования функциональных языков для построения компиляторов, грамматического разбора и т.д.
Курс будет интересен как практикующим программистам и студентам, изучившим основы компьютерных наук, так и математикам. Для программистов на императивных языках знакомство с функциональным подходом позволит расширить сознание, перейти на более чистый (свободный от побочных эффектов) стиль программирования с более высоким уровнем абстракции, научиться эффективно использовать новые возможности современных императивных языков (LINQ, лямбда-выражения и т.д.). Для математиков, функциональное программирование может служить безболезненным введением в компьютерные науки, поскольку в рамках курса мы практически «с нуля» строим (начиная от математических основ, вплоть до реализации интерпретатора/компилятора и описания формальной семантики) язык программирования на базе лямбда-исчисления – раздела дискретной математики.
Goal: Познакомить слушателя с основами функционального программирования как дисциплины, находящейся на стыке программирования и дискретной математики; дать, с одной стороны, практические навыки функционального программирования на используемом на практике языке F#, а с другой – показать связь между теоретическими главами computer science и программированием, осветив некоторые теоретические проблемы информатики (вычислимость, семантика языков программирования, доказательство программ) и показав, как они решаются в функциональном подходе.
Prerequisites: Строго говоря, предварительных знаний для курса не требуется – возможно изучение программирования, начиная с функционального подхода. Однако более традиционным подходом является изучение основ программирования на базе императивного языка, и затем изучение функционального программирования как альтернативной парадигмы. Курс в большей степени ориентирован именно на такой подход.

План занятий

LessonTitle <<Date
-
Lecture 1
-
Lecture 2
-
Lecture 3
-
Lecture 4
-
Тест 1
12 minutes
-
Lecture 5
-
Lecture 6
-
Lecture 7
-
Тест 2
12 minutes
-
Lecture 8
-
Lecture 9
Примеры работы со списками
Примеры работы со списками. Перестановки. Вычисление простых чисел. Работа с изображениями. Синтаксис порождения списка list comprehension.
-
Lecture 10
-
Lecture 11
-
Тест 3
21 minute
-
Lecture 12
-
Lecture 13
-
Тест 4
12 minutes
-
Lecture 14
Введение в л-исчисление
Основные модели вычислений. Синтаксис л-исчисления. Чистое и прикладное л-исчисление. Преобразования л-выражений. Редукция. Бетта-редукция и замена переменной.
-
Lecture 15
-
Lecture 16
-
Тест 5
24 minutes
-
Lecture 17
-
Lecture 18
-
Lecture 19
-
Lecture 20
-
Тест 6
12 minutes
-
Lecture 21
-
Lecture 22
-
Lecture 23
-
Тест 7
18 minutes
-
Lecture 24
-
Lecture 25
-
Lecture 26
-
Lecture 27
-
Тест 8
9 minutes
-
Lecture 28
-
Lecture 29
-
Lecture 30
-
Тест 9
12 minutes
-
5 hours
-