a la pregunta :
enorme(X), oscuro(X).
Analizando:
(a). Pregunta.
(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 :
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:
se reemplaza la primera meta con el cuerpo instanciado de la cláusula 7, dando una nueva lista de metas :
(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:
Se reemplaza la segundo meta en la lista de metas por cafe(X), dando:
X = oso.
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).
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).
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 :
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