144 гр, осень 2008
Если Вы обнаружили в тексте опечатку, содержательную ошибку, неточность или просто хотите что-то сообщить автору, можете оставить отзыв.
Haskell
fib - написать функцию, вычисляющую n-е число Фибоначчи;
rev - написать функцию, переворачивающую список;
fastfib - реализовать бесконечный список чисел Фибоначчи с линейной трудоёмкостью вычисления элементов списка;
ratiolist - реализовать бесконечный список рациональных чисел (можно с повторениями), выдающий либо пары (числитель, знаменатель), либо рациональные числа из библиотеки Ratio (вида n % d);
inputlist - реализовать программу, запрашивающую количество элементов списка, и значения элементов, и выдающую список;
unique - реализовать функцию, принимающую список, и возвращающую его же, но без повторений (с удалением второго и последующих включений элементов); должна работать и на бесконечных списках; для накопления информации можно использовать (а можно и не использовать) лямбда-функцию; проверить на рациональных числах;
C1 - написать контрольную работу, которая, почему-то, превратилась в домашнюю;
T12 - реализовать программу, добавляющую вершины в АВЛ-дерево (только дописать функции balanceNode и addNode в файле Tree12.hs в приложенном к странице архиве Tree12.7z).
Prolog
"add" - реализовать предикат, складывающий числа, представленные списком "камешков" или чего-либо другого, возможно переупорядочивание;
path - реализовать предикат, отыскивающий пути в графе с циклами и выдающий вершины, встречающиеся на пути между двумя данными.
Python (пример работающего переопределения операций — вложение Aov.py)
quat - реализовать Кватернионы Гамильтона с операциями сложения, вычитания, умножения, сопряжения, в т.ч. с участием вещественных чисел; поддержку стандартной библиотекой комплексных чисел можно игнорировать;
simplelist - реализовать ленивый список простых чисел (как когда-то на Java); должен поддерживать операцию in (__contains__).
Задачи для студентов других групп
Выдаются индивидуальные варианты, для зачёта надо решить все обязательные и сверхобязательные задачи.
Haskell
Реализации:
Hugs/WinHugs;
GHC.
Материалы:
Land of Lisp comics;
A Gentle Introduction to Haskell;
Yet Another Haskell Tutorial;
Душкин Роман, Функциональное программирование на языке Haskell + CD. ДМК, 2007, 608 стр.;
The IO Monad — Don't Panic.
Примеры определения классов типов и реализации классов в конкретных типах на Haskell — приложение classdemo.hs.html.
Prolog
Реализации:
Интерпретатор (один из): tuProlog (для всех ОС запускается в подкаталоге lib командой java -jar 2p.jar).
Материалы:
Python
Реализации:
CPython (под UNiX - подобными в составе дистрибутивов);
для Windows рекомендуется сборка CPython - Portable Python - сразу содержит оболочку IPython и среду SPE.
Материалы:
Примеры переопределения операций — приложение aov.py.
Успеваемость
Данные об успеваемости публикуются с устного согласия студентов группы. Для просмотра таблицы требуется браузер с поддержкой JavaScript. Без JavaScript таблицу можно посмотреть по ссылке.