Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Глава 7. добавить( Элемент, Список) :-



7.2

добавить(Элемент, Список):-

var(Список),!,

% Переменная Список представляет пустой список

Список = [Элемент | Хвост].

добавить(Элемент, [ _ | Хвост]):-

добавить(Элемент, Хвост).

принадлежит(X, Список):-

var(Список),!,

% Переменная Список представляет пустой список,

% поэтому X не может ему принадлежать

fail.

принадлежит(X, [X | Хвост]).

принадлежит(X, [ _ | Хвост]):-

принадлежит(X, Хвост).

Глава 8

8.2

добавить_в_конец(L1-[Элемент | Z2], Элемент, L1 - Z2).

8.3

обратить(А - Z, L - L):-

% Результатом является пустой список,

% если A-Z представляет пустой список

А == Z,!.

обратить([X | L] - Z, RL - RZ):-

% Непустой список

обратить(L - Z, RL - [X | RZ].

Глава 9

9.1

список([]).

список([ _ | Хвост]):-

список(Хвост).

9.2

принадлежит(X, X затем ЧтоУгодно).

принадлежит(X, Y затем Спис):-

принадлежит(X, Спис).

9.3

преобр([, ничего_не_делать).

преобр([Первый | Хвост], Первый затем Остальные):-

преобр(Хвост, Остальные).

9.4

преобр([, ПустСпис, _, ПустСпис).

% Случай пустого списка

преобр([Первый | Хвост], НовСпис, Функтор, Пустой):-

НовСпис =.. [Функтор, Первый, НовХвост],

преобр(Хвост, НовХвост, Функтор, Пустой).

9.8

сорт1([], []).

сорт1([X], [X]).

сорт1(Спис, УпорСпис):-

разбить(Спис, Спис1, Спис2),

% Разбить на 2 прибл. равных списка

сорт1(Спис1, Упор1),

сорт1(Спис2, Упор2),

слить(Упор1, Упор2, УпорСпис).

% Слить отсортированные списки

разбить([], [], []).

разбить([X], [X], []).

разбить([X, Y | L], [X | L1], [Y | L2]):-

% X и Y помещаются в разные списки

разбить(L, L1, L2).

9.9

(а) двдерево(nil).

двдерево(д(Лев, Кор, Прав)):-

двдерево(Лев),

двдерево(Прав).

9.10

глубина(пусто, 0).

глубина(д(Лев, Кор, Прав), Г):-

глубина(Лев, ГЛ),

глубина(Прав, ГП),

макс(ГЛ, ГП, МГ),

Г is МГ + 1.

макс(А, В, А):-

А >= В,!.

макс(А, В, В).

9.11

линеаризация(nil, []).

линеаризация(д(Лев, Кор, Прав), Спис):-

линеаризация(Лев, Спис1),

линеаризация(Прав, Спис2),

конк(Спис1, [Кор | Спис2], Спис).

9.12

максэлемент(д(_, Кор, nil), Кор):-!.

% Корень - самый правый элемент

максэлемент(д(_, _, Прав,), Макс):-

% Правое поддерево непустое

максэлемент(Прав, Макс).

9.13

внутри(Элем, д(_, Элем, _), [ Элем]).

внутри(Элем, д(Лев, Кор, _), [Кор | Путь]):-

больше(Кор, Элем),

внутри(Элем, Лев, Путь).

внутри(Элем,д(_, Кор, Прав), [Кор | Путь]):-

больше(Элем, Кор),

внутри(Элем, Прав, Путь).

9.14

% Отображение двоичного дерева, растущего сверху вниз

% Предполагается, что каждая вершина занимает при печати

% один символ

отобр(Дер):-

уровни(Дер, 0, да).

% Обработать все уровни

уровни(Дер, Уров, нет):-!.

% Ниже уровня Уров больше нет вершин

уровни(Дер, Уров, да):-

% Обработать все уровни, начиная с Уров

вывод(Дер, Уров, 0, Дальше), nl,

% Вывести вершины уровня Уров

Уров1 is Уров + 1,

уровни(Дер, Уров1, Дальше).

% Обработать следующие уровни

вывод(nil, _, _, _, _).

вывод(д(Лев, X, Прав), Уров, ГлубХ, Дальше):-

Глуб1 is ГлубХ + 1,

вывод(Лев, Уров, Глуб1, Дальше),

% Вывод левого поддерева

(Уров = ГлубХ,!,

% X на нашем уровне?

write(X), Дальше = да;

% Вывести вершину, продолжить

write(' ')),

% Иначе - оставить место

вывод(Прав, Уров, Глуб1, Дальше).

% Вывод левого поддерева





Дата публикования: 2015-10-09; Прочитано: 149 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...