我想写一个程序,告诉我树是否平衡。在这种情况下,平衡意味着相同的高度或高度差为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).
答案 0 :(得分:1)
H + 1
不会计算为H
的值加1;相反,Prolog构建一个术语,+
作为函子,H
和1
作为参数。 (尝试H + 1 =.. L
并检查L
的值,以使自己相信这一事实。)
执行类似
的操作height(B1, H1),
height(B2, H2),
abs(H1 - H2) =< 1.
=<
将执行算术评估。