Data structures 如何判断元素是否属于Prolog中的特定b树?

Data structures 如何判断元素是否属于Prolog中的特定b树?,data-structures,prolog,Data Structures,Prolog,我有以下程序,它用t谓词表示一个特定的b-树,并在/2谓词中提供in,说明元素X是否属于该树: 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

我有以下程序,它用
t
谓词表示一个特定的b-树,并在/2谓词中提供
in,说明元素
X
是否属于该树:

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中执行此查询


例如,如果
d
元素在表示的树中(获取true),或者
z
元素在该树中(获取false),我需要做什么来询问Prolog?

我要说的问题是
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)).
或者,您可以像这样存储您的树:

?- 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).

在过去的两周里,你每天至少被要求检查一次你的问题的拼写。拼写检查你的问题。你是对的……我会尽力去做,我保证:-)好的,现在已经很清楚了。我为我的英语错误道歉。我正在努力快速学习,经常忘记检查拼写。。。