我计算二叉树分支深度的谓词不起作用
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.
我正在尝试计算二叉树中左分支的深度,但谓词一直失败!
我试过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.