给我一个树构造器
tree(tip).
tree(bin(L,_,R)) :- tree(L), tree(R).
我的任务是确保给定一棵Ints树,如果L中的每个节点均<= X且R中的每个节点> = X,则bin(L,X,R)成立。因此,我想出了这个解决方案并且不确定我在做什么错。
代码:
bst(tip).
bst(bin(L,X,R)) :-
bst(L),
bst(R),
L <= X,
R >= X.
例如,构造树:
?- bst(bin(tip, 3, bin(tip, 4, tip))).
在TRUE时
?- bst(bin(tip, 3, bin(tip, 2, tip))).
是错误的。
我是Prolog的新手,所以任何建议都对您有所帮助
新部分:
getNode(bin(_,Y,_)) :-
Y.
bst(tip).
bst(bin(L,X,R)) :-
bst(L),
bst(R),
getNode(L) =< X,
getNode(R) >= X.
您在这里有一个不错的开端,但有几个问题需要解决。
首先,我相信SWI Prolog中小于或等于的运算符是=<
,而不是<=
。>>
第二,更重要的是,您的比较L <= X
和R >= X
无效,因为类型不匹配。您的变量L
和R
应该是树,这意味着它们分别是tip
或bin
术语。但是变量X
可能是数字(树节点中的数据)。相反,您将需要检查树节点的Left和Right子级的数据部分(中间参数),并在比较中使用它。