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



         

Отображение деревьев


Так же, как и любые объекты данных в Прологе, двоичное дерево Т может быть непосредственно выведено на печать при помощи встроенной процедуры write. Однако цель

        write( Т)

хотя и отпечатает всю информацию, содержащуюся в дереве, но действительная структура дерева никак при этом не будет выражена графически. Довольно утомительная работа - пытаться представить себе структуру дерева, рассматривая прологовский терм, которым она представлена. Поэтому во многих случаях желательно иметь возможность отпечатать дерево в такой форме, которая графически соответствует его структуре.

Существует относительно простой способ это сделать. Уловка состоит в том, чтобы изображать дерево растущим слева направо, а не сверху вниз, как обычно. Дерево нужно повернуть влево таким образом, чтобы корень стал его крайним слева элементом, а листья сдвинулись вправо (рис. 9.16).

fig9_16.gif (3774 bytes)

Рис. 9. 16.    (а)     Обычное изображение дерева.     (b)    То же дерево,

отпечатанное процедурой отобр (дуги добавлены для ясности).

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

        отобр( Т)

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

line();

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

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

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

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

line();

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

        отобр2( Т, Н)

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

и отобр2 такова:

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




Содержание  Назад  Вперед