Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.0k views
in Technique[技术] by (71.8m points)

prolog - Predicate returning false

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!

question from:https://stackoverflow.com/questions/65844610/predicate-returning-false

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

maxNodeInTree(Arbol, N) :-
   treeToList(Arbol, L), 
   maximumInList(L, N).

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...