2

我想编写一个程序来告诉我一棵树是否平衡。在这种情况下,平衡意味着相同的高度或 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).
4

1 回答 1

1

H + 1H如果您不告诉 Prolog 进行算术评估,则不会评估为加一的值;+相反,Prolog 使用as 函子和H1作为参数构建了一个术语。(尝试H + 1 =.. L检查 的值L以使自己相信这一事实。)

做类似的事情

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

=<将执行算术评估。

于 2011-09-05T11:40:05.487 回答