Domanda

Voglio scrivere un programma che mi dice se un albero è bilanciato o meno. In questo caso significa bilanciati stessa altezza o un dislivello di 1.

Questo è quello che ho scritto finora, ma non funziona per la differenza di altezza di 1. Perché?

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).
È stato utile?

Soluzione

H + 1 non viene valutata al valore di H più uno se non dite Prolog per fare la valutazione aritmetica; invece, Prolog costruisce un termine con + come functor e H e 1 come argomenti. (Provate H + 1 =.. L e verificare il valore di L a convincersi di questo fatto.)

fare qualcosa di simile

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

=< effettuerà la valutazione aritmetica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top