我想编写一个程序,告诉我一棵树是否平衡。在这种情况下,平衡表示相同的高度或高度差为1。

这是我到目前为止写的东西,但对1.的高度差异不起作用。为什么?

balanced(l(_)).
balanced(b(B1, B2)):-
    height(B1,H),
    height(B2,H),
    balanced(B1),
    balanced(B2).

balanced(b(B1,B2)):-
    height(B1,H + 1),
    height(B2,H),
    balanced(B1),
    balanced(B2).

balanced(b(B1,B2)):-
    height(B1,H),
    height(B2,H + 1),
    balanced(B1),
    balanced(B2).
有帮助吗?

解决方案

H + 1 未评估 H 再加上一个,如果您不告诉Prolog进行算术评估;相反,Prolog建立一个术语 + 作为函子和 H1 作为论点。 (尝试 H + 1 =.. L 并检查价值 L 说服自己这个事实。)

做类似的事情

height(B1, H1),
height(B2, H2),
abs(H1 - H2) =< 1.

=< 将执行算术评估。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top