Prolog 我用来计算二叉树分支深度的谓词是';行不通

Prolog 我用来计算二叉树分支深度的谓词是';行不通,prolog,depth,Prolog,Depth,我试图计算二叉树中左分支的深度,但谓词一直失败 我尝试了跟踪。并得出结论,失败状态必须来自is\2函子,但我仍然无法找出问题所在 leftdepth(void,0). leftdepth(tree(_,Left,_),N):-leftdepth(Left,N),N is N+1. 我希望查询的输出leftdepth(树(3,树(2,树(5,void,void)),树(7,void,void)),void),3)。为true,但输出false。调用: N is N + 1. N等于N+1。 没有

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

我尝试了
跟踪。
并得出结论,失败状态必须来自
is\2
函子,但我仍然无法找出问题所在

leftdepth(void,0).
leftdepth(tree(_,Left,_),N):-leftdepth(Left,N),N is N+1.
我希望查询的输出
leftdepth(树(3,树(2,树(5,void,void)),树(7,void,void)),void),3)。
为true,但输出false。

调用:

N is N + 1.
N等于N+1。
没有多大意义。在Prolog中,变量可以用一个值统一,但不能再用另一个值“重新统一”它。声明式编程的一个概念是变量不能改变值

您可以创建一个额外变量,一个用于“子”级别,另一个用于“父”级别:

leftdepth(void,0)。
leftdepth(树(\u1,左,\u1),N1):-
左深度(左,N),

N1是N+1。
N是N+1在Prolog中永远不会成功,因为您无法修改变量。谢谢您,您的评论帮助我解决了这个问题!谢谢,我刚刚从Daniel Lyon的评论中意识到这一点!但你的回答进一步澄清了这一点。
leftdepth(void, 0).
leftdepth(tree(_,Left,_), N1):-
    leftdepth(Left, N),
    N1 is N+1.