Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
ЛЕКЦИЯ 13, что символизирует
30.11.12
Начало красного террора.
50 минут тролления ФИТа.
To be continued.
Рекурсивные структуры данных в Прологе
Деревья
domains
treetp = tree(string, treetp, treetp); empty.
tree -- придуманное, можно вместо него писать всё что угодно
аргументы: тип узла, типы поддеревьев
a
/ \
b c
/ / \
d e f
tree(a, tree(b, tree(d, empty, empty), tree(c, tree(e, empty, empty), tree(f, empty, empty)))
Обход дерева
Почти все обходы имеют такую структуру:
traverse(empty).
traverse(tree(A, L, R)) :- обработка(A), traverse(L), traverse(R).
ПРИМЕРЫ
1. Найти сумму всех узлов дерева.
sum(empty, 0) :- !.
sum(tree(A, L, R), S) :- sum(L, S1), sum(R, S2), S=A+S1+S2.
_____________________
Под деревом мы будем понимать бинарное дерево.
Пока деревья неупорядоченные.
В графе и в дереве вершины иногда подразделяют на главную и подчинённую (или "отец и сын").
Любая вершина имеет отца, кроме корневой.
Лист дерева -- это вершина, которая не имеет поддеревьев.
Крона дерева -- это совокупность всех листов.
Высота дерева -- наибольший путь от корня к листу.
Про бинарные деревья в следующий раз.
ПРИМЕРЫ
1. Написать предикат, который определяет принадлежность элемента дереву.
contains(C, tree(C, L, R)) :- !.
contains(C, tree(_, L, _)) :- contains(C, L), !.
contains(C, tree(_, _, R)) :- contains(C, R).
Самостоятельное: написать программу, которая распечатывает все узлы дерева, порядок значения не имеет.
Оттестировать эту программу на дереве, которое было сегодня в аудитории.
__________________________________
30.11.12
Начало красного террора.
50 минут тролления ФИТа.
To be continued.
Рекурсивные структуры данных в Прологе
Деревья
domains
treetp = tree(string, treetp, treetp); empty.
tree -- придуманное, можно вместо него писать всё что угодно
аргументы: тип узла, типы поддеревьев
a
/ \
b c
/ / \
d e f
tree(a, tree(b, tree(d, empty, empty), tree(c, tree(e, empty, empty), tree(f, empty, empty)))
Обход дерева
Почти все обходы имеют такую структуру:
traverse(empty).
traverse(tree(A, L, R)) :- обработка(A), traverse(L), traverse(R).
ПРИМЕРЫ
1. Найти сумму всех узлов дерева.
sum(empty, 0) :- !.
sum(tree(A, L, R), S) :- sum(L, S1), sum(R, S2), S=A+S1+S2.
_____________________
Под деревом мы будем понимать бинарное дерево.
Пока деревья неупорядоченные.
В графе и в дереве вершины иногда подразделяют на главную и подчинённую (или "отец и сын").
Любая вершина имеет отца, кроме корневой.
Лист дерева -- это вершина, которая не имеет поддеревьев.
Крона дерева -- это совокупность всех листов.
Высота дерева -- наибольший путь от корня к листу.
Про бинарные деревья в следующий раз.
ПРИМЕРЫ
1. Написать предикат, который определяет принадлежность элемента дереву.
contains(C, tree(C, L, R)) :- !.
contains(C, tree(_, L, _)) :- contains(C, L), !.
contains(C, tree(_, _, R)) :- contains(C, R).
Самостоятельное: написать программу, которая распечатывает все узлы дерева, порядок значения не имеет.
Оттестировать эту программу на дереве, которое было сегодня в аудитории.
__________________________________
Соседние файлы в папке Шумихин