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.