Frage

Ich möchte ein Programm schreiben, das mir sagt, ob ein Baum ausgeglichen ist oder nicht. In diesem Fall bedeutet ausgeglichene gleiche Höhe oder eine Höhenunterschiede von 1.

Das habe ich bisher geschrieben, aber es funktioniert nicht für den Höhenunterschied von 1. Warum?

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).
War es hilfreich?

Lösung

H + 1 wird nicht auf den Wert von bewertet H Plus eins, wenn Sie Prolog nicht sagen, dass sie eine arithmetische Bewertung durchführen soll; Stattdessen baut Prolog einen Begriff mit + Wie der Funkor und H und 1 als Argumente. (Versuchen H + 1 =.. L und überprüfen Sie den Wert von L sich von dieser Tatsache zu überzeugen.)

Mach so etwas wie

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

=< wird eine arithmetische Bewertung durchführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top