我正在尝试计算二叉树中左分支的深度,但是谓词不断失败!
我已经尝试过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。
答案 0 :(得分:2)
通话:
N is N + 1.
没有太大意义。在Prolog中,变量可以与值统一,但是您就不能再与不同值“重新统一”。 声明式编程的概念之一是变量不能更改值。
您可以做的是创建一个额外的变量,一个变量用于“ child ”的级别,另一个变量用于“ parent ”的级别:< / p>
leftdepth(void, 0).
leftdepth(tree(_,Left,_), N1):-
leftdepth(Left, N),
N1 is N+1.