Ejercicio.
1. Considere el programa anterior y realize la traza de ejecución a la pregunta :
?- enorme(X), oscuro(X).
compare su traza de ejecución con la anterior, ya que esencialmente es la misma
pregunta pero con otro orden. ¿En cuál de ambos casos Prolog realiza más trabajo antes
de encontrar la respuesta final?
a) programa:
enorme(oso).
enorme(elefante).
chico(gato).
cafe(oso).
negro(gato).
gris(elefante).
oscuro(Z) :- negro(Z).
oscuro(Z) :- cafe(Z).
b)pregunta:?- enorme(X),oscuro(X).
c)Traza de ejecucion:1) Lista inicial de metas: enorme(X),oscuro(X).2) Examina el programa de arriba hacia abajo buscando una clausula cuya cabeza empate con la primera meta: enorme(X) se encuentra en la clausula (1), se instancia X = oso.3) Se trata o busca satisfacer la segunda meta inicial: oscuro(oso), se encuentra la regla en la clausula 7.
Se busca satisfacer: oscuro(oso) :- negro(oso). (no se encuentra negro(oso)) BACKTRACKING.
4) Tras el backtracking se devuelve a la clausula 7 y se prueba con la clausula 8.
Se busca satisfacer: oscuro(oso) :- cafe(oso). (si se encuentra en el programa la clausula cafe(oso)).
Esta clausula no tiene cuerpo, asi que la lista de metas queda vacia. Esto indica una terminacion exitosa y la instanciacion corresponde a la variable queda como:
X = oso.
blog y twitter
Hace 15 años
No hay comentarios:
Publicar un comentario