На этом шаге мы рассмотрим как происходит вывод элементов дерева.
Для того чтобы вывести непустое дерево T, необходимо:
Величина S, которую можно выбрать по желанию, - это дополнительный параметр при изображении деревьев.
Введем предикат write_tree1 (T, T, 0, 0), печатающий дерево T с отступом на S пробелов от левого края экрана.
Второе дерево является выходным параметром (он необходим, чтобы после просмотра дерева оно вернулось в неизмененном виде, иначе из-за рекурсии возвращался бы пустой список).
Третий аргумент - отступ, он первоначально равен 0. Четвертый параметр необходим для определения пустое ли дерево: если он равен 0, то дерево пустое, 1 - не пустое.
write_tree (T, T):- write_tree1 (T, T, 0, 0). write_tree1 (nil, _, _, 1):-!. write_tree1 (nil, _, _, 0): - write ("Дерево пустое!!!"), nl. write_tree1 (tr (L, X, R), T, S, _):- B = S+2, write_tree1 (R, T, B, 1), tab (B), write (X), nl, write_tree1 (L, T, B, 1). tab (0). tab (X):- write (" "), X1 = X-1, tab (X1).
В этом предикате предусмотрен сдвиг на 2 позиции для каждого уровня дерева. Для печати пробелов используется вспомогательный предикат tab (X).
Мы закончили изучение динамических структур данных в языке программирования Prolog.