Relação de comprimento de árvore reversível
Estou tentando escrever relações reversíveis em Prolog "puro" (nãois
, cortar ou coisas semelhantes. Sim, é lição de casa), e devo admitir que não tenho idéia de como. Eu não vejo nenhum processo para criar uma coisa dessas.
Nós recebemos relações aritméticas "não-puras" mas reversíveis (add, mult, equal, less, ...) que devemos usar para criar essas relações.
No momento, estou tentando entender como criar funções reversíveis criando a relaçãotree(List,Tree)
o que é verdade seList
é a lista das folhas da árvore bináriaTree
.
Para conseguir isso, estou tentando criartree_size(Tree,N)
relação que é verdade quandoTree
temN
sai. Aqui está minha relação ingênua e irreversível:
tree_len(n(_,leaf,leaf),1).
tree_len(n(op,G,D),N) :-
tree_len(G,TG),
tree_len(D,TD),
add(TG,TD,N).
Eu posso fazer a consultatree_len(some tree, N)
mas não digamostree_len(X,3)
, então não é reversível. Até agora eu tentei algumas coisas, mas devo admitir que me sinto desanimada, pois não sei onde e o que procurar. Existe realmente uma maneira de fazer isso?