Назад

Парадигмы программирования: язык Haskell

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

Во 2 семестре 2009–2010 учебного года на практических занятих по обязательному спецкурсу «Парадигмы программирования» изучается язык Haskell. Компилятор ghc установлен на компьютере linux.fenster.name, доступ к которому есть из сетей НГУ, academ.org и HomeNet.

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

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

Вопросы к зачёту от лектора: rtf

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

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

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

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

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

  1. Слияние списков. Реализовать слияние двух списков, не используя операцию ++.
    append1 [1,2,3,4] [5,6,7] = [1,2,3,4,5,6,7]
  2. Разворот списка. Реализовать разворот списка.
    reverse1 [1,2,3,4] = [4,3,2,1]
  3. Бесконечные списки — 1. Реализовать функцию, возвращающую список чисел Фибоначчи.
    take 7 fib = [0,1,1,2,3,5,8]
  4. Бесконечные списки — 2. Реализовать функцию, возвращающую список всех простых чисел.
    take 6 primes = [2,3,5,7,11,13]
  5. Сортировка. Реализовать функцию, сортирующую список сравнимых (Ord a) элементов в порядке неубывания.
    sort1 [3,1,5,4,2] = [1,2,3,4,5]
  6. Перестановки. Реализовать функцию, генерирующую список всех перестановок элементов списка.
    permut [1,2,3] = [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
  7. Бинарные деревья. Реализовать модуль Tree, содержащий необходимые функции для работы с бинарными деревьями поиска. Должны быть реализованы следующие функции:
    1. создание пустого дерева;
    2. вставка элемента в дерево поиска (возвращается новое дерево);
    3. удаление элемента из дерева поиска (возвращается новое дерево);
    4. определение наличия элемента в дереве поиска;
    5. вывод значений узлов дерева поиска в порядке возрастания (инфиксный обход), в порядке префиксного обхода и в порядке обхода в ширину;
    6. вывод дерева в виде скобочной записи (например, (2,(1,(),()),(3,(),(4,(),())))).
    Пример создания модуля и своего типа: tgz (tar xzf haskell-modules.tar.gz).
  8. Индивидуальное задание — 1.
  9. Индивидуальное задание — 2. Условия задач находятся в отдельном файле, распределение задач — здесь.