Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Prolog > Список, элементы которого – непустые бинарные дере


Автор: aki295 18.12.2011, 15:12
Имеется вот такое задание: Имеется список, элементы которого – непустые бинарные деревья. Для каждого элемента списка найти среднее арифметическое положительных узлов дерева, из полученных результатов сформировать список (без использования стандартного предиката 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).


Нужна помощь в дописании программы, чтобы она считала только положительные узлы дерева при подсчете среднего арифмитического, кто поможет, буду очень благодарен)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)