Бинарное дерево - Lisp (229879)
Формулировка задачи:
Доброго времени суток! Прошу вас помочь с лабой по функциональному программированию!
Задание[Lisp + Haskel]:
Дано бинарное дерево, некоторые вершины которого помечены. Проверить, находятся ли последние на одном пути от корня к листу.
Указания к заданию:
Не могу разобраться с этим предметом, а сессию надо закрывать.
Lisp еще как-то осваиваю, Haskel даже не открывал еще..
Заранее благодарен! Прошу не ругать, честно стараюсь вникнуть, но видимо ошибся со специальностью((
В практическом плане:
- определить заданную функцию обработки списков через простые встроенные функции (типа car, cdr, cons,...) средствамии языка ЛИСП;
- добиться работоспособности полученной функциональной программы.
!!!!!!!!!!!!!
- не использовать функции ввода-вывода и функции "фон-неймановского" стиля программирования (типа setq,prog);
!!!!!!!!!!!!!
В теоретическом плане:
- интерпретировать ЛИСП-программу средствами теории примитивно-рекурсивных функций, для этого:
-- дать рекурсивное определение исходных и выходных данных программы, используя металингвистические формулы (право-, леволинейные, КС грамматические правила, т.е формулы вида A->b;A->bB;A->Bb;A->BC..);
-- дать определение требуемой функции через простейшие функции, с применением операторов суперпозиции, подстановки, примитивной рекурсии;
-- например, требуется определить функцию f, вычисляющую число элементов заданного списка.
Определим множество исходных данных L:
L->_; (пустой список)
L->Le; (e-элемент списка)
Множество выходных данных - целые числа:
Определим функцию f: f(_)=0 f(eL)=f(L)+1;
Данному определению соответствует программа на ЛИСПе (defun f(l)(cond((null l)0)(T(+(f(cdr l))1))))
- сравнить программы (ХАСКЕЛЬ и ЛИСП) по критериям:
-- пользовательские возможности;
-- возможности модификации;
-- объем текста программ;
-- трудозатраты;
-- соответствие стиля программирования и языка поставленной задаче -- и другие.
- не использовать сложные встроенные функции, выполняющие специфические операции над структурами;
Решение задачи: «Бинарное дерево»
textual
Листинг программы
Работа с деревьями через абстрактный тип данных, реализованный замыканиями: (как Абельсон завещал - вот такие вот функциональные структуры данных) Свертка дерева простой кустарной велосипедной функцией: Все помеченные вершины на одном пути от корня к листу Свертка дерева через страшный подсмотренный котоморфизм: (котоморфизм стырен отсюда http://habrahabr.ru/post/57503/) Все помеченные вершины на одном пути от корня к листу Свертка дерева простой кустарной велосипедной функцией: Есть помеченные вершины на разных путях от корня к листу Свертка дерева через страшный подсмотренный котоморфизм: (котоморфизм стырен отсюда http://habrahabr.ru/post/57503/) Есть помеченные вершины на разных путях от корня к листу
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д