lunes, 9 de junio de 2014

EJERCICIOS (Capitulo 2)

2.4. Significado procedural.
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?

Recordemos:
(a). Programa.
enorme( oso). % cláusula 1
enorme( elefante). % cláusula 2
chico( gato). % cláusula 3
cafe( oso). % cláusula 4
negro( gato). % cláusula 5
gris( elefante). % cláusula 6
oscuro( Z) :- % cláusula 7 : cualquier negro es oscuro.
negro( Z).
oscuro( Z) :- % cláusula 8 : cualquier café es oscuro.
cafe( Z).
(b). Pregunta.

?- enorme( X), oscuro( X). % Quién es oscuro y enorme ?
 (c).Traza de la Ejecución
 1)    Lista inicial de metas: enorme(X), oscuro(X).
 2)    Examina el programa de arriba hacia abajo buscando una cláusula
cuya cabeza empate con la primera meta:
enorme (X)
Se encuentra la cláusula 1: enorme (oso).
Esta cláusula no tiene cuerpo, así que la lista de metas, luego de
instanciarse se convierte en:            
 oscuro(oso)
 3)    Examina el programa para buscar la meta oscuro(oso), encuentra la 
cláusula 7 que luego de instanciarse se convierte 
 enorme(oso),negro(oso)
4)    Examina el programa para buscar la meta negro(oso), no se
encuentra ninguna cláusula. 
Por lo tanto se realiza un proceso de backtracking al paso 3) y 
se elimina la instanciación 
negro(oso)
 Se continúa examinando el programa a partir de la cláusula 7.
5)Examina el programa para buscar la meta oscuro(oso), encuentra la cláusula 8 que
luego de instanciarse se convierte en:
enorme(oso),cafe(oso)
Esta cláusula no tiene cuerpo, así que la lista de metas se queda vacía. 
Esto indica una terminación exitosa y la instanciación correspondiente 
a la variable queda como:
                  X = oso.

En la  traza de ejecución: oscuro(X),enorme(X)  Prolog realiza más trabajo 
antes de encontrar la respuesta final.

No hay comentarios:

Publicar un comentario