viernes, 13 de junio de 2014

Ejercicio 2.4 de prolog Pedro Francisco

1. Considere el programa anterior y realice la traza de ejecución

a  la pregunta : 





 enorme(X), oscuro(X).


Analizando:

(a). Pregunta.   

?- oscuro( X), enorme( X).        % Quién es oscuro y enorme ?

Traza de la ejecución.
(1). Lista inicial de metas : oscuro(X), enorme(X).
(2). Examina el programa de arriba hacia abajo  buscando  una  cláusula cuya cabeza empate con la primera meta : oscuro(X). Se encuentra la cláusula 7 : 

               oscuro( Z) :- negro( Z).

se reemplaza la primera meta con el cuerpo instanciado de la cláusula 7, dando una nueva lista de metas :  

               negro(X), enorme(X).

(3). Examina el programa para encontrar un empatamiento de negro(X). Se encuentra la cláusula 5: negro( gato). Esta cláusula no  tiene  cuerpo, así que la lista de metas, luego de instanciarse se convierte en :

               enorme(gato)

(4). Examina el programa para buscar la meta enorme(gato), no se encuentra ninguna cláusula. Por lo tanto se realiza un proceso de backtracking al paso 3) y se elimina la instanciación X = gato. Ahora la lista de metas es de nuevo:
               negro(X), enorme(X).

Se continúa examinando el programa a partir de la cláusula 5. No se encuentra ninguna cláusula. Por lo tanto se realiza un proceso de backtracking nuevamente al paso (2) y se continúa examinando a partir de la cláusula 7. Se encuentra la cláusula 8:
               oscuro(Z) :- cafe(Z).

Se reemplaza la primera meta en la lista de metas por cafe(X), dando:
               cafe(X), enorme(X)

(5). Examina el programa buscando empatar cafe(X), encuentra cafe(oso). Esta cláusula no tiene cuerpo, así que la lista de metas es ahora:
               enorme(oso)

(6). Examina el programa  y  encuentra  la  cláusula  enorme(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. 


b) Pregunta.      
?- enorme(X), oscuro(X).       % Quién es oscuro y enorme ?

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 en 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 encontrar un empatamiento de oscuro(oso). Se encuentra la cláusula 7:

oscuro( Z) :- negro( Z).  

se reemplaza la primera meta con el cuerpo instanciado de la cláusula 7, dando una nueva lista de metas :  

               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). 

Ahora la lista de metas es de nuevo:  

               enorme(oso), oscuro(oso). 

Se continúa examinando el programa a partir de la cláusula 7. Se encuentra la cláusula 8:  

               oscuro(Z) :- cafe(Z).

Se reemplaza la segundo meta en la lista de metas por cafe(X), dando:  

               enorme(oso), cafe(oso). 

(5). Examina el programa buscando empatar cafe(X), encuentra 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. 


No hay comentarios:

Publicar un comentario