Архив‎ > ‎Весна 2010‎ > ‎

с/с «Программирование на 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 
    (до 17.02.2010, максимум 5 баллов)
  2. Типизированные деревья: описать тип данных Expression, соответствующий дереву разбора арифметических операций с операциями +, -, *, /, числами и переменными. Написать функцию reduce : Expression -> Expression, которая произведет все возможные вычисления в выражении, включая упрощение выражений типа (0 * i) и (i - i). (до до 24.02.2010, максимум 4 балла + бонусы за интересные оптимизации)
  3. К предыдущему заданию добавить следующие конструкции: присваивание и последовательность. 
    до 03.03.2010, максимум 3 балла
  4. Проверить, какое из определений  MULT, данных в статье http://en.wikipedia.org/wiki/Lambda_calculus, более эффективно в смысле количества β-редукций.
    до 03.03.2010, максимум 2 балла
  5. Решить первые 5 задач с сайта http://projecteuler.net/
    до 11.03.2010, максимум 3 балла
  6. Реализовать язык FLAE
    до 31.03.2010 (всего 2 недели + 1 дополнительная), максимум 5 баллов.
  7. Реализовать асинхронную/параллельную загрузку сайта: на вход подается начальная страница; посчитать количество страниц доступных по ссылкам лежащих в той же папке или ниже.
    до 20.04 (продлено), максимум 4 балла.
  8. Реализовать программу с 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, и т.п.
  • Этот список не полон, но за не надлежащее оформление могут быть применены штрафные санкции
Подстраницы (1): Язык FLAE
ċ
AsyncWorkFlow.fs
(1k)
Victor Polozov,
8 апр. 2010 г., 11:30
ċ
Events.fs
(2k)
Victor Polozov,
31 мар. 2010 г., 16:13
ċ
calc.fs
(5k)
Victor Polozov,
24 мар. 2010 г., 04:32
Ċ
Victor Polozov,
24 мар. 2010 г., 04:33
Ċ
Victor Polozov,
24 мар. 2010 г., 04:14
Comments