2013-04-26 66 views
0

我有代表由t谓语特定B树,并提供in/2断言说,如果一个元素X属于此树下面的程序:如何判断一个元素是否属于Prolog中特定的b-Tree?

t(
    t(nil, b, nil),  
    a,    
    t(t(nil,d,nil), c, nil) 
). 

in(X, t(_,X,_)).   
in(X, t(L,_,_)) :- in(X,L).  
in(X, t(_,_,R)) :- in(X,R). 

我的问题是,我不知道如何使用这两个谓词在Prolog shell中执行此查询。

例如,我有什么做的,问的Prolog如果d元素是在代表树(获得),或者如果元素z这棵树上(获得)?

+3

你每天被要求至少一次,在过去两周进行拼写检查您的问题。 SPELL检查你的问题。 – 2013-04-26 16:02:53

+0

你是对的......我会尽力去做,我保证:-) – AndreaNobili 2013-04-26 16:13:49

回答

2

我想说的问题是,t/3不属于你的事实数据库,它属于查询。或者,这个t/3根本不是一个谓词,而仅仅是一个事实(尽管这个区别比初看起来似乎没那么有意义)。但是,我们可以用这方面的工作,我们需要做一些重建:

?- t(A,B,C), T=t(A,B,C), in(d,T). 
A = t(nil, b, nil), 
B = a, 
C = t(t(nil, d, nil), c, nil), 
T = t(t(nil, b, nil), a, t(t(nil, d, nil), c, nil)) 

?- t(A,B,C), T=t(A,B,C), in(z,T). 
false. 

T=t(A,B,C)体操,必须重建你的树。它会更清楚,如果你有谓词创建的树木,所以你可以做一个查询,看起来更像是这样的:

?- empty_tree(T), 
    insert(T, a, T1), 
    insert(T1, b, T2), 
    insert(T2, c, T3), 
    in(c, T3). 

或者你可以存储你的树是这样的:

tree(t(t(nil,b,nil),a,t(t(nil,d,nil),c,nil)). 

然后您的查询看起来更像:

?- tree(T), in(d, T). 
+0

好吧,现在它很清楚。我对英语错误表示歉意。我尝试快速学习,经常忘记检查拼写... – AndreaNobili 2013-04-26 16:22:30

相关问题