Шаг 20.
Динамические структуры данных в языке Prolog.
Изображение дерева

    На этом шаге мы рассмотрим как происходит вывод элементов дерева.

    Для того чтобы вывести непустое дерево 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.




Предыдущий шаг Содержание