假设这里是一棵二叉搜索树,并且给定 above(X,Y)
-X
直接在上面的规则Y
。我还创建了规则root(X)
-X
没有父级。
然后,我试图弄清楚这棵树中节点的深度。假设树的根节点是“r”所以我得到了 fact level(r,0)
。为了实施规则level(N,D) :-
,我想的是这里应该有一个递归。因此,我尝试了
level(N,D): \+ root(N), above(X,N), D is D+1, level(X,D).
所以如果N
不是根,X
上面有一个节点N
,层级D
加一,然后递归。但是当我测试这个时,它只适用于根条件。当我创建更多事实时,例如节点“s”是节点“r”的左子节点,我的查询是 level(s,D)。它返回我“不”。我跟踪了查询,它显示了我
1 1 Call: level(s,_16) ?
1 1 Fail: level(s,_16) ?
我只是困惑为什么我打电话时它会失败 level(s,D)
?