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


Автор: BaguK 2.12.2008, 20:08
Задача: Имеется список элементы, элементы которого - не пустые бинарные деревья. Для каждого элемента найти глубину дерева, из полученных результатов сформировать список (без использования стандартного предиката findall).

Код

DOMAINS
  i=integer
  treetype=empty; tr(i, treetype, treetype)
  list=i*
  listT=treetype*

PREDICATES
  max(i, i, i)
  treedepth(treetype, i)
  treel2tdl(listT, list)

CLAUSES
  max(X, Y, X):-X>Y,!.
  max(_, Y, Y).
  treedepth(empty, 0).
  treedepth(tr(_, L, R), D):-
     treedepth(L, D1),
     treedepth(R, D2),
     max(D1, D2, D_M),
     D=D_M+1.


Не могу написать предикат treel2tdl(listT, list).

Пример: treel2tdl([tr(10,tr(8,empty,empty),tr(15,empty,empty)),
         tr(10,tr(8,empty,empty),tr(15,tr(12,empty,empty),tr(19,empty,empty))),
         tr(5,tr(3,tr(6,empty,empty),tr(4,empty,empty)),tr(10,tr(2,empty,empty),tr(8,empty,empty)))],
         L)
Должен возратить список L=2,3,3.

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