代码之家  ›  专栏  ›  技术社区  ›  obvionaoe

计算二叉树分支深度的谓词不起作用

  •  2
  • obvionaoe  · 技术社区  · 6 年前

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

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   willeM_ Van Onsem    6 年前

    呼叫:

    N is N + 1.

    没什么意义。在prolog中,一个变量可以与一个值统一,但是你不能再用一个 不同的 价值。概念之一 声明式编程 变量不能改变值。

    你能做的就是创建一个额外的变量,一个这样的变量用于 小孩 ,一个用于 起源 “:

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