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