如何在列表和二叉搜索树中搜索范围,例如find(min,max,list)?

时间:2013-12-26 18:59:28

标签: prolog

请帮助我需要在二叉搜索树中搜索并返回迭代次数来构建列表,我的谓词总是返回false

findExamsInRange(R1, R2, T, S, N) :- find(R1, R2, T, S, N), N > 0.

find(R1,R2, nil, [], N).

find(R1, R2, t(V,L,R), S, N) :-
    V >= R1, V =< R2,
    find(R1, R2, L, L, NL),
    find(R1, R2, R, LR, NR),
    append([V|LL], LR, S),
    N is NL+NR+1.

find(R1, R2, t(V,L,R), S, N) :- V < R1, find(R1, R2, R, S, N).

find(R1, R2, t(V,L,R), S, N) :- V > R2, find(R1, R2, L, S, N).

如何解决这个问题? 没有人能回答,谁聪明可以解决它?

1 个答案:

答案 0 :(得分:1)

如果你纠正了两个小问题(在find / 5谓词的第一个子句中与N相关,在第二个中与LL相关),那么你就有了可以搜索二叉树的代码数字。

下一步是修改树,以便它可以将数字与课程名称一起存储,即每个节点中的

最后,你必须编写一个从输入列表构建搜索树的谓词,然后就完成了。

我假设您被明确要求使用二叉树,否则直接在输入列表中搜索会更容易...