質問

木のバランスが取れているかどうかを教えてくれるプログラムを書きたいです。この場合、バランスは同じ高さまたは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に算術評価を行うように指示しない場合は、さらに1つ。代わりに、Prologはで用語を構築します + ファンチャーとして H1 議論として。 (試す H + 1 =.. L の値を確認します L この事実を自分自身に納得させるために。)

のようなことをします

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

=< 算術評価を実行します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top