首页 > 解决方案 > 我计算二叉树分支深度的谓词不起作用

问题描述

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

我已经尝试过trace.,我得出的结论是失败状态必须来自is\2仿函数,但我仍然无法弄清楚问题是什么......

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).真,但输出为假。

标签: prologdepth

解决方案


来电:

N is N + 1.

没有多大意义。在 Prolog 中,一个变量可以与一个值统一,但您不能再将它与不同的值“重新统一”。声明式编程的概念之一是变量不能改变值。

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

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

推荐阅读