Prólogo - Árbol equilibrado o no
-
26-10-2019 - |
Pregunta
Quiero escribir un programa que me diga si un árbol está equilibrado o no. En este caso, equilibrado significa la misma altura o una diferencia de altura de 1.
Esto es lo que he escrito hasta ahora, pero no funciona para la diferencia de altura de 1. ¿Por qué?
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).
Solución
H + 1
no se evalúa al valor de H
Además, uno si no le dice a Prolog que realice una evaluación aritmética; En cambio, Prolog construye un término con +
como el functor y H
y 1
Como los argumentos. (Probar H + 1 =.. L
y verifique el valor de L
para convencerse de este hecho.)
Hacer algo como
height(B1, H1),
height(B2, H2),
abs(H1 - H2) =< 1.
=<
Realizará evaluación aritmética.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow