如何判断一个元素是否属于Prolog中特定的b-Tree?
问题描述:
我有代表由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
这棵树上(获得假)?
答
我想说的问题是,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
你每天被要求至少一次,在过去两周进行拼写检查您的问题。 SPELL检查你的问题。 – 2013-04-26 16:02:53
你是对的......我会尽力去做,我保证:-) – AndreaNobili 2013-04-26 16:13:49