我计算二叉树分支深度的谓词不起作用

My predicate to calculate the depth of a binary tree branch isn't working

我正在尝试计算二叉树中左分支的深度,但谓词一直失败!

我试过trace.,得出的结论是失败状态一定来自is仿函数,但我仍然无法弄清楚问题出在哪里。 ..

leftdepth(void,0).
leftdepth(tree(_,Left,_),N):-leftdepth(Left,N),N is N+1.

我希望查询 leftdepth(tree(3,tree(2,tree(5,void,void),tree(7,void,void)),void),3). 的输出为真,但结果为假。

来电:

<b>N</b> is <b>N</b> + 1.

没有多大意义。在 Prolog 中,一个变量可以与一个值统一,但是你不能再 "re-unify" 它与 不同的 值。 声明式编程的概念之一是变量不能改变值。

你可以做的是创建一个额外的变量,一个用于“child”的级别,一个用于“parent”的级别":

leftdepth(void, 0).
leftdepth(tree(_,Left,_), <b>N1</b>):-
    leftdepth(Left, N),
    <b>N1</b> is N+1.