Бинарные деревья - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д