Выполнить преобразование дерева в список - пролог 5.2 - Prolog
Формулировка задачи:
Дан список, элементы которого — непустые бинарные деревья с числами в качестве вершин. Для каждого такого дерева выполнить преобразование дерева в спи-сок (в порядке обхода голова-левый-правый) и вывести результат в виде списка списков. Затем через пробел вывести максимальное значение среди всех элементов.
Например: если дано "[bt(2,no,bt(1,no,no)), bt(3,bt(5,no,no),bt(2,no,no))]", ответом будет "[[2,1],[3,5,2]] 5".
не могу через пробел вывести максимальное значение среди всех элементов. помогите !
Решение задачи: «Выполнить преобразование дерева в список - пролог 5.2»
textual
Листинг программы
domains treetype = t(integer, treetype, treetype); nil treelist = treetype* il = integer* ill = il* predicates determ max_s(ill, integer) /*determ treeToList(treetype,il) - (o,i)*/ determ do(treelist, ill) preorder(treetype,il) conc(il,il,il) max_ab(integer,integer,integer). max(il,integer). clauses /*treeToList(nil,[]):-!. treeToList(t(H,LT,RT),L):- treeToList(LT,ListLT), treeToList(RT,ListRT), conc([H],ListLT,Res1), conc(Res1,ListRT,L). */ do([],[]). do([T|Ts],[L1|Ls]):-preorder(T,L1),/*change(L1,L),*/do(Ts,Ls). preorder(nil,[]):-!. preorder(t(Root,nil,nil),[Root]):-!. preorder(t(Root,L,R), [Root|Ls]):-preorder(L,LL),preorder(R,LR),conc(LL,LR,Ls). max_ab(A,B,A):-A>B,!. max_ab(_,B,B). max([A],A):-!. max([H|Tail],Min):-max(Tail,M),max_ab(H,M,Min). max_s([A],Max):-!,max(A,Max). max_s([T|Ts],Max):-max(T,M1),max_s(Ts,Ms),max_ab(M1,Ms,Max). conc([],Ys,Ys). conc([X|Xs],Ys,[X|Zs]):-conc(Xs,Ys,Zs). goal do([t(2,nil,t(1,nil,nil)),t(3,t(5,nil,nil),t(2,nil,nil))], LIST),max_s(LIST,MAX).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д