Имеется вот такое задание: Имеется список, элементы которого – непустые бинарные деревья. Для каждого элемента списка найти среднее арифметическое положительных узлов дерева, из полученных результатов сформировать список (без использования стандартного предиката findall). Для полученного списка подсчитать количество элементов списка без какого-либо указываемого элемента.
Что-то нашел здесь, что-то доделал, вообщем в итоге получилось вот это:
| Код | domains treetype = tree(integer, treetype, treetype); empty treelist = treetype* rlist = real* intlist=integer* predicates determ summ(treetype, integer, integer) determ gotolist(treelist, rlist) list_length (rlist, integer, integer) check(real, integer, integer) clauses check(Number, Number, 0):- !. check(_, _, 1). list_length ([ ], _, 0):- !. list_length ([H | T], Number, Length):- list_length(T, Number, Length_T), check(Number, H, Result), Length = Length_T + Result. gotolist([H|T], [Arif|Rest]):- summ(H, Sum, C), Arif = Sum/C, gotolist(T, Rest). gotolist([], []). summ(tree(Root, empty, empty), Root, 1):- !. summ(tree(_,empty, Right), Sum, C):-!, summ(Right, Sum, C). summ(tree(_, Left, empty), Sum, C):-!, summ(Left, Sum, C). summ(tree(_, Left, Right), Sum, C):- summ(Left, L, A), summ(Right, R, B), Sum = L+R, C = A+B. GOAL gotolist([tree(10, tree(3, empty, empty), empty), tree(-1, empty, tree(-9, empty, empty)), tree(2, tree(0, empty, empty), tree(5, empty, empty))], L), list_length(L, 2, Result), write(Result), write(L).
|
Нужна помощь в дописании программы, чтобы она считала только положительные узлы дерева при подсчете среднего арифмитического, кто поможет, буду очень благодарен) |