【发布时间】:2016-02-28 23:14:26
【问题描述】:
假设这里是一个二叉搜索树,并给出above(X,Y) - X 直接在Y 之上的规则。我还创建了规则 root(X) - X has no parent。
然后,我试图找出这棵树中节点的深度。
假设树的根节点是“r”所以我得到了事实level(r,0)。为了实现规则level(N,D) :-,我想的是这里应该有一个递归。
因此,我尝试了
level(N,D): \+ root(N), above(X,N), D is D+1, level(X,D).
所以如果N不是根,则在N之上有一个节点X,层级D加一,然后递归。但是当我测试这个时,它只适用于根条件。当我创建更多事实时,例如节点“s”是节点“r”的左子节点,我的查询是 level(s,D)。它返回我“不”。我跟踪了查询,它显示了我
1 1 Call: level(s,_16) ?
1 1 Fail: level(s,_16) ?
我只是困惑为什么当我调用level(s,D) 时它会失败?
【问题讨论】:
-
您是否在查询中忘记了破折号 (
-),或者这只是一个错字?
标签: math prolog logic prolog-toplevel