Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Predicate returning false

Tags:

prolog

I'm having trouble with the following predicate:

treeToList(void, []).
treeToList(arbol(X, HI1, HD1), L) :- 
   treeToList(HI1, L1),
   treeToList(HD1, L2),
   append(L1, [X|L2], L).
    
maximumInList([X], X).
maximumInList([A|L], X) :-
   maximumInList(L,X1), 
   (A > X1 -> X = A; X = X1).
    
maxNodeInTree(arbol, N) :-
   treeToList(arbol, L), 
   maximumInList(L, N).

TreeToList gets a tree and returns a list with all of its nodes. Meanwhile maximumInList gets a list and returns the maximum element in the list.

Both of these predicates work fine individually, however the last one, maxNodeInTree, is supposed to first get the list L using treeToList which then will be passed to maximumInList and it'll return the maximum element in the whole tree. And yet Prolog returns false.

Any tips are appreciated!

like image 777
Sanzor Avatar asked Aug 08 '26 06:08

Sanzor


1 Answers

You have a typo in the last predicate (arbol instead of Arbol). Try:

maxNodeInTree(Arbol, N) :-
   treeToList(Arbol, L), 
   maximumInList(L, N).
like image 176
Paulo Moura Avatar answered Aug 10 '26 19:08

Paulo Moura