我正在尝试在二叉搜索树中搜索范围。但是这段代码返回false。我不确定问题出在哪里。
mytree1(node(5, node(3, nil, nil),
node(8, node(7, nil, nil),
node(9, nil, nil)))).
findExamsInRange(X,Y, T) :- find(X,Y,T).
find(X,Y, node(X, _, _)).
find(X,Y, node(N, L, _)) :- N > X,
between(X,Y,N),
find(X,Y,L), append(N, V).
find(X, node(N, _, R)) :- N < X,
between(X,Y,N),
find(X,Y,R), append(N, V).
答案 0 :(得分:1)
在浏览完代码之后...我发现您将所选节点附加到名为“V”的列表中。 但是你没有通过你的主谓词(find)将它作为结果传递给你。 还有很多事情你需要解决...你不是在处理你到达树的叶子并且有一个有两个nils的节点的情况。 你有两个不同的情况,一个是你正确的,另一个是你要离开...但事实上,如果你的节点是IN范围你应该左右两边。 那些不满足范围的案件怎么样?你应该考虑那些并包括它们......否则你会因为没有案件而得到“假”。 find(X,Y,node(X,_,_))。 这行代码没用......我建议你删除它。 所以要结束...我认为最好是在你的谓词中添加一个参数来传递列表(作为一个开头),之后你需要为nil个案例添加一些表示树结束的案例