在Prolog中搜索二叉树的元素

时间:2014-09-22 18:53:43

标签: prolog

我对Prolog很新,并试图找到一个在二叉树中搜索的元素,它发现它成功但问题是如果它还没有给出肯定,我希望它说没有或者说没有找到。我的代码是:

child(1,2,3).
child(2,4,5).
child(3,6,7).
node(1,a).
node(2,b).
node(3,c).
node(4,d).
node(5,f).
node(6,f).
node(7,g).


show(X):-
    write('element is found in node: '),write(X),nl.
inc(X,Y,Z):-
    Y is X+X,
    Z is X+X+1.


find(A):-
    traverse3(1,A).
traverse3(X,A):-
    check(X,A),
    inc(X,Y,Z),
    child(X,Y,Z),
    traverse3(Y,A),
    traverse3(Z,A).

check(X,A):- not(node(X,A)).

check(X,A):- 
    node(X,A),
    show(X).
traverse3(X,A):- not(child(X,Y,Z)).

1 个答案:

答案 0 :(得分:1)

这是一个不寻常的二叉树。但无论如何,因为你已经"标准化"它是一个数据库表示,你要做的就是要求它。

换句话说,如果您的计划tree.pl仅包含child/3node/2个事实:

child(1,2,3).
child(2,4,5).
child(3,6,7).
node(1,a).
node(2,b).
node(3,c).
node(4,d).
node(5,f).
node(6,f).
node(7,g).

您可以简单地查询所需的元素:

?- [tree].
true.

?- node(N, a).
N = 1.

?- node(N, f).
N = 5 ;
N = 6.

?- node(4, E).
E = d.

?- node(N, E).
N = 1, E = a ;
N = 2, E = b ;
N = 3, E = c ;
N = 4, E = d ;
N = 5, E = f ;
N = 6, E = f ;
N = 7, E = g.

或者我有什么遗失的东西?