?- 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?
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 ?
?- enorme( X), oscuro( X). % Quién es oscuro y enorme ?
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.
No hay comentarios:
Publicar un comentario