Парадигмы программирования

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

Во 2 семестре 2007-2008 учебного года на практических занятих по обязательному спецкурсу «Парадигмы программирования» изучается язык Haskell.

Место и время: четверг, 19:20, ауд. 310 ГК НГУ.

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

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

  1. Душкин Р.В. Функциональное программирование на языке Haskell. М.: ДМК-пресс, 2006.
  2. A Gentle Introduction to Haskell
  3. Лекции по ФП Р.В.Душкина
  4. haskell.ru

Результаты: TBD

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

  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,(),())))).

Архив: доступны задания по языку LISP прошлого семестра.