假設這裏是一個二叉搜索樹,並且給出了規則above(X,Y)
-X
直接在Y
之上。我也創建了規則root(X)
- X
沒有父母。數學序言 - 在序言中搜索節點的級別
然後,我試圖弄清楚這棵樹中節點的深度。 假設樹的根節點是「r」所以我得到了事實level(r,0)
。爲了執行規則level(N,D) :-
,我在想的是它應該在這裏有一個遞歸。 因此,我試圖
level(N,D): \+ root(N), above(X,N), D is D+1, level(X,D).
所以如果N
不是根,還有具有上面N
和D
級加一,然後遞歸節點X
。但是當我測試這個時,它只適用於根條件。當我創建更多事實時,例如節點「s」是節點「r」的剩餘部分,我的查詢是級別(s,D)。它返回我「不」。我跟蹤查詢,它顯示我
1 1 Call: level(s,_16) ?
1 1 Fail: level(s,_16) ?
我只是困惑,爲什麼當我打電話level(s,D)
失敗?
難道你忘了在查詢破折號( - '') ,或者這只是一個錯字? –