Prolog - albero bilanciato o no
-
26-10-2019 - |
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).
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