Назад

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

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

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

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

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

  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
Зайков Александр
+
+
+
+
+
+
+
 
+
8
хорошо
5
Исаев Валерий
+
+
+
+
+
+
+
+
+
9
отлично
6
Кременная Ольга
+
+
+
+
+
+
+
 
 
7
удовл
7
Кузькоков Владислав
+
+
+
+
+
+
+
+
+
9
отлично
8
Ломакин Сергей
+
+
+
+
+
+
+
+
+
9
отлично
9
Лысяк Александр
+
+
+
+
+
+
+
+
+
9
отлично
10
Носова Дарья
+
+
+
+
+
+
+
 
+
8
хорошо
11
Полушкин Михаил
+
+
+
 
 
 
 
 
 
3
неудовл
12
Сорокин Роман
+
+
+
+
+
+
+
+
+
9
отлично
13
Тищенко Николай
+
+
+
+
+
+
+
+
+
9
отлично
14
Часовщикова Анна
+
+
+
+
+
+
+
 
+
8
хорошо
Гистограмма

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

  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. Условия задач находятся в отдельном файле, распределение задач — здесь.