с/с «Программирование на 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 вторника) + ещё неделя с прогрессивном штрафом.

    1. Базовое ФП: реализовать следующие функции над списками Sum, Min, Max, Map, SumSqr, AddToEnd
    2. (до 17.02.2010, максимум 5 баллов)
    3. Типизированные деревья: описать тип данных Expression, соответствующий дереву разбора арифметических операций с операциями +, -, *, /, числами и переменными. Написать функцию reduce : Expression -> Expression, которая произведет все возможные вычисления в выражении, включая упрощение выражений типа (0 * i) и (i - i). (до до 24.02.2010, максимум 4 балла + бонусы за интересные оптимизации)
    4. К предыдущему заданию добавить следующие конструкции: присваивание и последовательность.
    5. до 03.03.2010, максимум 3 балла
    6. Проверить, какое из определений MULT, данных в статье http://en.wikipedia.org/wiki/Lambda_calculus, более эффективно в смысле количества β-редукций.
    7. до 03.03.2010, максимум 2 балла
    8. Решить первые 5 задач с сайта http://projecteuler.net/
    9. до 11.03.2010, максимум 3 балла
    10. Реализовать язык FLAE
    11. до 31.03.2010 (всего 2 недели + 1 дополнительная), максимум 5 баллов.
    12. Реализовать асинхронную/параллельную загрузку сайта: на вход подается начальная страница; посчитать количество страниц доступных по ссылкам лежащих в той же папке или ниже.
    13. до 20.04 (продлено), максимум 4 балла.
    14. Реализовать программу с GUI. Использовать хотя бы 2 комбинатора над событиями.
    15. (Под комбинаторами в данном контексте понимаются методы из модуля Event или Observable. Например, в Events.fs используются Event.partition и Event.merge)
    16. до 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#
    • Хороший код в функциональном стиле
    • Интересная идея
    • Желательно использование различных языковых конструкций и концепций

Текущая успеваемость

2010-I.F#

Рекомендации по оформлению кода

Код заданий должен быть красиво оформлен.

    • Обязательное наличие заголовка файла (ФИО, копирайт, год, описание задания)
    • Именование идентификаторов - camelCase или PascalCase
    • Разумное форматирование
    • К программе должны прилагаться тесты
    • Не надо посылать бинарные и объектные файлы, файлы-кэши Intelli-Sense, и т.п.
    • Этот список не полон, но за не надлежащее оформление могут быть применены штрафные санкции