我对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)).
答案 0 :(得分:1)
这是一个不寻常的二叉树。但无论如何,因为你已经"标准化"它是一个数据库表示,你要做的就是要求它。
换句话说,如果您的计划tree.pl
仅包含child/3
和node/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.
或者我有什么遗失的东西?