Prolog-平衡树与否

Prolog-平衡树与否,prolog,tree-balancing,Prolog,Tree Balancing,我想写一个程序,告诉我一棵树是否平衡。在这种情况下,平衡意味着相同的高度或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), bal

我想写一个程序,告诉我一棵树是否平衡。在这种情况下,平衡意味着相同的高度或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
如果不告诉Prolog进行算术求值,则不会求值为
H
加1的值;相反,Prolog构建了一个术语,其中
+
作为函子,
H
1
作为参数。(尝试
H+1=…L
并检查
L
的值,使自己相信这一事实。)

做点像

height(B1, H1),
height(B2, H2),
abs(H1 - H2) =< 1.
高度(B1、H1),
高度(B2,H2),
abs(H1-H2)=<1。

=如果我尝试你的建议,我的tree6(b(b(l(1)、b(l(2)、b(l(3)、b(l(4)、l(5щщщ))、b(l(6)、b(l(7)、b(l(8)、b(l(9)、l(10щщщщщщщщщщщ))根据代码)是平衡的)是平衡的。@Josie,忘记调用
abs?