0

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

  1    1  Call: level(s,_16) ? 
  1    1  Fail: level(s,_16) ?

を呼び出したときになぜ失敗するのか混乱しています level(s,D)か?

4

1 に答える 1