Парадигмы программирования
Общая информация
Во 2 семестре 2007-2008 учебного года на практических занятих по обязательному спецкурсу
«Парадигмы программирования» изучается язык Haskell.
Место и время: четверг, 19:20, ауд. 310 ГК НГУ.
Преподаватель: Александр Геннадьевич Фенстер, fenster@fenster.name
Рекомендуемая литература:
- Душкин Р.В. Функциональное программирование на языке Haskell. М.: ДМК-пресс, 2006.
- A Gentle Introduction to Haskell
- Лекции по ФП Р.В.Душкина
- haskell.ru
Результаты: TBD
Список семестровых заданий
- Слияние списков. Реализовать слияние двух списков, не используя операцию
++
.
append1 [1,2,3,4] [5,6,7] = [1,2,3,4,5,6,7]
- Разворот списка. Реализовать разворот списка.
reverse1 [1,2,3,4] = [4,3,2,1]
- Бесконечные списки — 1. Реализовать функцию, возвращающую список чисел Фибоначчи.
take 7 fib = [0,1,1,2,3,5,8]
- Бесконечные списки — 2. Реализовать функцию, возвращающую список всех простых чисел.
take 6 primes = [2,3,5,7,11,13]
- Сортировка. Реализовать функцию, сортирующую список сравнимых (
Ord a
) элементов
в порядке неубывания.
sort1 [3,1,5,4,2] = [1,2,3,4,5]
- Перестановки. Реализовать функцию, генерирующую список всех перестановок элементов списка.
permut [1,2,3] = [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
- Бинарные деревья. Реализовать модуль
Tree
, содержащий необходимые функции для работы с
бинарными деревьями поиска. Должны быть реализованы следующие функции:
- создание пустого дерева;
- вставка элемента в дерево поиска (возвращается новое дерево);
- удаление элемента из дерева поиска (возвращается новое дерево);
- определение наличия элемента в дереве поиска;
- вывод значений узлов дерева поиска в порядке возрастания (инфиксный обход), в порядке префиксного обхода и
в порядке обхода в ширину;
- вывод дерева в виде скобочной записи (например,
(2,(1,(),()),(3,(),(4,(),())))
).
Архив: доступны задания по языку LISP прошлого семестра.