54
predicates
print_all_elements(treetype)
clauses
print_all_elements(nil).
print_all_elements(tree(X, Y, Z)) :-
write(X), nl, print_all_elements(Y),
print_all_elements(Z).
goal
print_all_elements(tree(a, tree(b, tree(d, nil, nil),
tree(e, nil, nil)),
tree(c, nil, nil))).
Пример 65: написать программу проверки изоморфности двух
бинарных деревьев.
domains
treetype = tree(symbol, treetype, treetype);nil
predicates
isotree (treetype, treetype)
clauses
isotree (T, T).
isotree (tree (X, L1, R1), tree (X, L2, R2)):- isotree (L1, L2), isotree (R1,
R2).
isotree (tree (X, L1, R1), tree (X, L2, R2)):- isotree (L1, R2), isotree (L2,
R1).
Пример 66: написать предикаты создания бинарного дерева из одного
узла и вставки одного дерева в качестве левого или правого поддерева в
другое дерево.
domains
treetype = tree(symbol, treetype, treetype);nil
predicates
create_tree(symbol, tree)
insert_left(tree, tree, tree)
insert_rigth(tree, tree, tree)
clauses
create_tree(N, tree(N,nil,nil)).
insert_left(X, tree(A,_,B), tree(A,X,B)).
insert_rigth(X,tree(A,B,_), tree(A,B,X)).
goal
create_tree(a, T1)), insert_left(tree(b, nil, nil), tree(c, nil, nil), T2),
insert_rigth(tree(d, nil, nil), tree(e, nil, nil), T3).
В результате: T1=tree(a, nil, nil), T2=tree(c, tree(b, nil, nil), nil),
T3=tree(d, nil, tree(e, nil, nil)).