с/с «Программирование на F#»
Описание курса
Тема курса: функциональное программирование на примере языка F#
В курсе рассматриваются основы функционального программирования на языке F#, в том числе некоторые концепции, которые принято ассоциировать с ФП, такие как алгебраические типы данных, сопоставление с образцом, ленивые вычисления, автоматический вывод типов, и др. Дается общее представление о платформе разработки Microsoft.NET
Требования к слушателям
Умение программировать на любом алгоритмическом ЯП, знакомство с циклами, функциями и рекурсией. Желательно знакомство с языком C#.
Знакомство с функциональным программированием и платформой .NET не является обязательным.
Технические требования
Язык F# включен в платформу разработки Visual Studio 2010. Так же, интеграция F# возможна с платформой Visual Studio 2008 shell (Integrated Mode). С помощью проекта mono (http://www.mono-project.com) F# доступен для разработки и запуска на не-Windows платформах.
Зачет
Зачет состоит из трех частей: текущие задачи, курсовая, доклад и письменный экзамен в конце, по вопросам из докладов. Максимум 30 + 20 + 30 + 20 = 100 баллов. Для зачета требуется не менее 60 баллов.
Задания
Задания посылаются на email (victorp (a) math.spbu.ru). На выполнения задания дается неделя (до 24:00 вторника) + ещё неделя с прогрессивном штрафом.
- Базовое ФП: реализовать следующие функции над списками Sum, Min, Max, Map, SumSqr, AddToEnd
- (до 17.02.2010, максимум 5 баллов)
- Типизированные деревья: описать тип данных Expression, соответствующий дереву разбора арифметических операций с операциями +, -, *, /, числами и переменными. Написать функцию reduce : Expression -> Expression, которая произведет все возможные вычисления в выражении, включая упрощение выражений типа (0 * i) и (i - i). (до до 24.02.2010, максимум 4 балла + бонусы за интересные оптимизации)
- К предыдущему заданию добавить следующие конструкции: присваивание и последовательность.
- до 03.03.2010, максимум 3 балла
- Проверить, какое из определений MULT, данных в статье http://en.wikipedia.org/wiki/Lambda_calculus, более эффективно в смысле количества β-редукций.
- до 03.03.2010, максимум 2 балла
- Решить первые 5 задач с сайта http://projecteuler.net/
- до 11.03.2010, максимум 3 балла
- Реализовать язык FLAE
- до 31.03.2010 (всего 2 недели + 1 дополнительная), максимум 5 баллов.
- Реализовать асинхронную/параллельную загрузку сайта: на вход подается начальная страница; посчитать количество страниц доступных по ссылкам лежащих в той же папке или ниже.
- до 20.04 (продлено), максимум 4 балла.
- Реализовать программу с GUI. Использовать хотя бы 2 комбинатора над событиями.
- (Под комбинаторами в данном контексте понимаются методы из модуля Event или Observable. Например, в Events.fs используются Event.partition и Event.merge)
- до 20.04, максимум 4 балла.
Доклады
В докладе оценивается:
- полнота раскрытия материала
- доступность для слушателей
- план доклада
- умение уложиться в отведенное время
Темы
- Лямбда-исчисление - Добролеж Анна (24.02)
- История функционального программирования - Омельчук Александр (03.03)
- Типизированное лямбда-исчисление - Титов Артём (10.03)
- Обзор .NET - Нишневич Анастасия (17.03)
- Система типов Хиндли-Милнера, вывод типов, алгоритм унификации. - Мальчевский Михаил (24.03)
- События в F#. - Эдуард Баранов (31.03) пример
- Асинхронное и параллельное программирование на F# - Василинец Сергей (07.04) пример
- Создание приложений с GUI в F# - Лушников Андрей (14.04)
- Вычислимые выражения (computation expressions) - Ромашкин Амир (21.04)
- Реализация типов F# в .NET - Землянский Юрий (21.04)
- Встроенные языки программирования (Language oriented programming - Quotation, Reflection, fslex, fsyacc) - Абишев Тимур
- to be continued...
Курсовая
Требования к курсовой
- Реализация на F#
- Хороший код в функциональном стиле
- Интересная идея
- Желательно использование различных языковых конструкций и концепций
Текущая успеваемость
Рекомендации по оформлению кода
Код заданий должен быть красиво оформлен.
- Обязательное наличие заголовка файла (ФИО, копирайт, год, описание задания)
- Именование идентификаторов - camelCase или PascalCase
- Разумное форматирование
- К программе должны прилагаться тесты
- Не надо посылать бинарные и объектные файлы, файлы-кэши Intelli-Sense, и т.п.
- Этот список не полон, но за не надлежащее оформление могут быть применены штрафные санкции