Программирование на языке Пролог для искусственного интеллекта

6ec30db9

а) Обычное изображение



Рисунок 9. 16.    (а)     Обычное изображение дерева.     (b)    То же дерево,
отпечатанное процедурой отобр (дуги добавлены для ясности).


Давайте определим процедуру

        отобр( Т)

так, чтобы она отображала дерево в форме, показанной на Рисунок 9.16. Принцип работы этой процедуры:

line();

Для того, чтобы отобразить непустое дерево Т, необходимо:

(1)        отобразить правое поддерево дерева Т с отступом вправо на расстояние Н;

(2)        отпечатать корень дерева Т;

(3)        отобразить левое поддерево дерева Т с отступом вправо на расстояние Н.

line();

Величина отступа Н, которую можно выбирать по желанию, - это дополнительный параметр при отображении деревьев. Введем процедуру

        отобр2( Т, Н)



печатающую дерево Т с отступом на Н пробелов от левого края листа. Связь между процедурами отобр и отобр2 такова:

        отобр( Т) :- отобр2( Т, 0).

На Рисунок 9.17 показана программа целиком. В этой программе предусмотрен сдвиг на 2 позиции для каждого уровня дерева. Описанный принцип отображения можно легко приспособить для деревьев других типов.

line();

        отобр( Т) :-
                отобр2( Т, 0).

        отобр2( nil, _ ).

        отобр2( дер( L, X, R), Отступ) :-
                Отступ2 is Отступ + 2,
                отобр2( R, Отступ2),
                tab( Отступ), write( X), nl,
                отобр( L, Отступ2).

line();



Содержание раздела