Мне нужно реализовать предикат trav(Tree,List)
, который выполняет обход дерева слева направо;
Где: Дерево определяется узлом структуры (левый, правый), где левый и правый могут быть либо другим узлом, либо любым элементом данных Пролога. Список - это список значений конечных узлов в дереве.
Например:
?- trav(x,L).
L = [x].
?- trav(node(1,node(2,node(a,b))),L).
L = [1, 2, a, b] .
Что у меня есть на данный момент:
trav(tree,[ ]).
trav(node(Left,Rigth), L) :-
trav(Left, L),
trav(Right, L),
append(Left,[Left|Right],L).
is_tree/1
, который определяет, что такое дерево, по вашему мнению. Это очень редко, но, безусловно, возможно иметь узлы без элементов. Такие узлы обычно встречаются для деревьев выражений. Но иначе их не бывает. - person false   schedule 07.06.2015