Бинарные деревья - Prolog (226747)
Формулировка задачи:
Здравствуйте, помогите решить задачу для друга.
Бинарные деревья задаются с помощью тернарного функтора tree(Left,Root,Right), где Root - элемент, находящийся в вершине, а Left и Right - соответственно левое и правое поддерево. Пустое дерево изображается атомом nil. Следующий терм является примером более сложного дерева tree(nil, 5, tree(nil, 6, tree(tree(nil, 8, nil), 10, nil))).
Напишите предикат, p(+T, ?N), который вычисляет наибольшее число N в вершинах дерева T. В приведенном примере должно получиться 10.
Решение задачи: «Бинарные деревья»
textual
Листинг программы
domains int=integer treetype = tree(treetype, integer, treetype); nil predicates max2(int,int,int) max3(int,int,int,int) p(treetype,int) clauses max2(M1,M2,M1) :- M1>=M2. max2(M1,M2,M2) :- M2>=M1. max3(M1,M2,M3,M1) :- M1>=M2, M1>=M3. max3(M1,M2,M3,M2) :- M2>=M1, M2>=M3. max3(M1,M2,M3,M3) :- M3>=M2, M3>=M1. p(tree(nil,N,nil),N). p(tree(L,N,nil),M) :- p(L,M1), max2(M1,N,M). p(tree(nil,N,R),M) :- p(R,M1), max2(M1,N,M). p(tree(L,N,R),M) :- p(L,M1), p(R,M2), max3(M1,M2,N,M). goal p(tree(nil, 5, tree(nil, 6, tree(tree(nil, 8, nil), 10, nil))),M), write(M), nl.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д