Ошибка в программе "максимальный элемент дерева" - Prolog
Формулировка задачи:
вот код ,209 ошибка в строчке (max(A,B,A):-A>=B,!.)Ребят объясните пожалуйста что не так .Спасибо
Листинг программы
- domains
- int=integer
- intl=int*
- predicates
- max(intl,int)
- clauses
- max(A,B,A):-A>=B,!.
- max(_,B,B).
- max(t(N,nil,nil),N).
- max(t(_,Tree,nil),Max):-max(Tree,Max).
- max(t(_,nil,Tree),Max):-max(Tree,Max).
- max(t(_,Left,Right),Max):-max(Left,MLeft),max(Right,MRight),max(MLeft,MRight,Max).
Решение задачи: «Ошибка в программе "максимальный элемент дерева"»
textual
Листинг программы
- DOMAINS
- tree=tree(integer,tree,tree);nil
- PREDICATES
- max(tree,integer,integer)
- max2(integer,integer,integer)
- maxv(tree,integer)
- clauses
- max2(A,A,A).
- max2(A,B,B) :- B>A.
- max2(A,B,A) :- A>B.
- max(tree(N,nil,nil),M,Z) :- max2(M,N,Z).
- max(tree(V,Tree,nil),M,MAX) :- max(Tree,M,M1),max2(V,M1,MAX).
- max(tree(V,nil,Tree),M,MAX) :- max(Tree,M,M1),max2(V,M1,MAX).
- max(tree(V,Left,Right),M,MAX) :- max(Left,M,ML),max(Right,M,MR),max2(ML,MR,MM), max2(V,MM,MAX).
- maxv(nil,0).
- maxv(tree(V,L,R),Z) :- max(tree(V,L,R),V,Z).
- goal
- maxv(tree(1,tree(-7,tree(12,nil,nil),tree(-6,tree(20,nil,nil),tree(9,nil,nil))),nil),Z),write(Z),nl.
- %% ответ=20 - верно
Объяснение кода листинга программы
В этом коде реализуется функция, которая находит максимальный элемент в дереве. Список решений на основе кода:
- Переменная
tree
представляет собой структуру данныхдерево
. - Функция
max2
сравнивает три значения и возвращает максимальное. - Функция
max
рекурсивно вызывает себя для каждого поддерева. - Функция
maxv
применяет функциюmax
к узлу и сохраняет результат в переменнуюZ
. - В конечной цели функция
maxv
вызывается для дерева и результат выводится на экран. - В данном случае, максимальный элемент дерева равен 20.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д