Назад

Парадигмы программирования: Haskell и F#

Оценка за практику во втором семестре будет выставлена следующим образом:
один из Хаффманов + 7 других задач — «5»;
один из Хаффманов + 5 других задач ИЛИ 7 задач без Хаффмана — «4»;
один из Хаффманов + 3 других задачи ИЛИ 5 задач без Хаффмана — «3».

Общая информация

Во 2 семестре 2009–2010 учебного года на практических занятих по обязательному спецкурсу «Парадигмы программирования» изучаются языки Haskell и F#. Компилятор ghc установлен на mephisto.ccfit.nsu.ru.

Преподаватель:
Александр Геннадьевич Фенстер,
fenster@fenster.name, +7 913 9053295.

Лектор:
Лидия Васильевна Городняя.

Рекомендуемая литература:

  1. Душкин Р. В. Функциональное программирование на языке Haskell. М.: ДМК-пресс, 2006.
    Лично я эту книгу заказал в books.ru и не пожалел; вряд ли её реально найти в книжных магазинах в Новосибирске.
    Впрочем, если у кого-то получится — сообщите мне, пожалуйста.
  2. A Gentle Introduction to Haskell на haskell.org
  3. Лекции по ФП Р. В. Душкина
  4. haskell.ru
  5. Литература по F# ожидается.

Таблица результатов

# Фамилия, имя  1   2   3   4   5   6   7   8   9   10  Итого
Оценка за практику
1
Агбаш Игорь
+
+
+
+
 
 
 
 
 
 
4
 
2
Балабанов Артём
+
+
+
+
 
 
 
 
 
 
4
 
3
Бердов Валерий
+
+
+
+
 
+
+
+
+
 
8
 
4
Бовкун Екатерина
+
+
+
+
 
+
+
+
 
 
7
 
5
Боровский Виктор
+
+
 
 
 
 
 
 
 
 
2
 
6
Добросельский Максим
+
+
+
+
 
+
+
+
 
 
7
 
7
Жиров Александр
+
+
+
+
 
+
+
+
 
 
7
 
8
Зырянов Константин
+
+
+
+
 
+
+
+
 
 
7
 
9
Ивлев Александр
+
+
+
+
+
+
+
+
+
 
9
 
10
Клименко Александра
+
 
+
 
 
 
 
 
 
 
2
 
11
Комышев Евгений
+
+
+
+
 
+
 
+
 
 
6
 
12
Косырькова Ольга
+
+
+
 
 
+
+
+
 
 
6
 
13
Кошелев Анатолий
+
+
+
+
+
+
+
+
+
 
9
 
14
Крупин Сергей
+
+
+
 
 
+
+
+
+
 
7
 
15
Кутинова Мария
+
+
+
+
 
+
+
+
+
+
9
 
16
Мокшин Павел
+
+
+
+
+
+
 
+
+
 
8
 
17
Полунин Денис
+
+
+
+
+
+
+
+
 
 
8
 
18
Свиридов Валентин
+
+
+
+
+
+
+
+
+
 
9
 
19
Сенцов Евгений
+
+
+
+
+
+
+
+
+
+
10
 
20
Стененко Александр
+
+
+
+
+
+
 
+
+
 
8
 
21
Степанкевич Евгений
+
+
+
+
 
 
 
 
 
 
4
 
22
Суслопаров Денис
+
+
+
+
 
+
+
 
+
 
7
 
23
Усова Анна
+
+
+
+
 
+
+
+
+
 
8
 
24
Федотов Виктор
+
+
+
+
 
 
 
 
 
 
4
 
25
Штайгер Ирина
+
+
+
+
 
+
 
 
 
 
5
 
Гистограмма

Список семестровых заданий


В этом году я решил отойти от схемы прошлых лет: «много очень простых задач, пара задач чуть сложнее и две индивидуальные задачи». В процессе придумывания индивидуальных задач постоянно приходилось думать о том, красиво ли задача решается на Хаскелле. Но сейчас я подумал, что с детским садом надо завязывать. Лучший способ почувствовать язык программирования — написать на нём несколько реальных программ, а самые реальные программы для обучения можно найти только в реальной жизни (а также в заданиях первого курса по программированию). В результате в этом семестре у нас не будет детсада типа «развернуть список» (на лиспе уже все развернули), а будут вполне жизненные задачки, каждая из которых достойна написания небольшого скриптика на перле или несложной программки на нормальном языке. Прошу прощения за некоторый перекос в сторону задач, связанных с разбором текстов (парсингом). Жизнь — она и в самом деле такая.

Задания по Haskell

  1. Заголовки MIME. Если посмотреть на заголовки письма в «сыром» виде, можно заметить, что длинные заголовки разбиваются по строкам, причём продолжение заголовка начинается с символа табуляции:

    From: Alexander Fenster <fenster@fenster.name>
    To: Somebody <somebody@example.com>,
            John Doe <john@example.com>,
            example@example.com
    Subject: this subject looks like a very long
            text which continues on the second line
    X-Mailer: vim

    (пример в .txt с реальными '\t')

    Склейте длинные заголовки, чтобы получилось следующее:

    From: Alexander Fenster <fenster@fenster.name>
    To: Somebody <somebody@example.com>, John Doe <john@example.com>, example@example.com
    Subject: this subject looks like a very long text which continues on the second line
    X-Mailer: vim

  2. CSV. Первый курс, задача 13. (пример входного файла)

  3. Имя пользователя. Первый курс, задача 12.

  4. Подсчёт количества вхождений слов в текст. Первый курс, задача 19.

  5. Архиватор Хаффмана.* Реализуйте архиватор и деархиватор, работающие по алгоритму Хаффмана. Для простоты реализуйте обе программы в виде фильтра: читаем из stdin, печатаем в stdout.
    Про сложность получившегося алгоритма, записанного в функциональном стиле, и время работы на больших файлах в этом задании можно не задумываться, но если у вас получится сделать быстрого Хаффмана — будет просто замечательно.

Задания по F#

По предложению Лидии Васильевны оставлены те же задачи, что и на Haskell. :-)
Ситуация осложнена тем, что у нас в терминалке F#, насколько я знаю, нет (в комплект имеющейся 2005-й студии он вроде бы не входит). Варианты: работа на своём ноутбуке, работа в Linux (mono). Желающим я могу завести аккаунты на сервере с установленным mono.


* Необходимо для получения оценки «отлично».