ここに二分探索木があると仮定し、 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
がルートでない場合は、ノードが1 つX
上N
のレベルD
にあり、再帰があります。しかし、これをテストしたところ、ルート条件でのみ機能します。ノード "s" がノード "r" の leftchild であるなど、さらにファクトを作成したとき、私のクエリは level(s,D) です。それは私に「いいえ」を返します。私はクエリをたどりました、それは私を示しています
1 1 Call: level(s,_16) ?
1 1 Fail: level(s,_16) ?
を呼び出したときになぜ失敗するのか混乱しています level(s,D)
か?