Поиск количества совпадающих элементов в бинарном дереве - Prolog
Формулировка задачи:
Здравствуйте. Нужно найти количество совпадающих элементов в бинарном дереве. Я написал следующие правила
но получается не то что хотел.
Например:
а расчитывал на
По отдельности element и counter работают, соответственно 1-й выводит все элементы дерева, а 2-й кол-во вхождений элемента в дерево. Помогите разобраться в чем же дело
Листинг программы
- element(t(X,_,_), X).
- element(t(_, Left, Right), X) :- element(Left,X);element(Right,X).
- counter(nil,_,0) :- !.
- counter(t(K,TL,TR),K,N) :- counter(TL,K,NL), counter(TR,K,NR), N is NL+NR+1.
- counter(t(_,TL,TR),K,N) :- counter(TL,K,NL), counter(TR,K,NR), N is NL+NR.
- func(Tree) :- element(Tree, Elements), func(Tree), counter(Tree, Elements, Num),
- write(Elements), write('-'), write(Num), nl.
Листинг программы
- ?- func(t(158,t(158,nil,nil), t(152,nil,nil))).
- 158-2
- yes
Листинг программы
- ?- func(t(158,t(158,nil,nil), t(152,nil,nil))).
- 158-2
- 158-2
- 152-1
- yes
Решение задачи: «Поиск количества совпадающих элементов в бинарном дереве»
textual
Листинг программы
- func(Tree) :-
- element(Tree, Elements), % <--- Здесь возникает развилка
- counter(Tree, Elements, Num),
- write(Elements), write('-'), write(Num), nl,
- fail; % <--- Здесь происходит принудительный откат к развилке
- write('---'). % <--- А сюда попадём, когда варианты перебора в развилке закончатся
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д