2013-04-26 36 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

相關問題