我的判断二叉树深度的谓词不起作用

时间:2019-01-10 15:34:47

标签: prolog depth

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

我已经尝试过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).的输出为true,但输出为false。

1 个答案:

答案 0 :(得分:2)

通话:

N is N + 1.

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

您可以做的是创建一个额外的变量,一个变量用于“ child ”的级别,另一个变量用于“ parent ”的级别:< / p>

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