Backtracking (Conjunciones parte II)
Objetivo: Explorar los fundamentos del Backtracking.
Suponga que tenemos la siguiente base de Conocimiento:
Prolog
distinguirá esta pregunta como dos diferentes de las cuales ambas deben ser
verdad, por la coma que los separa. Se identifican como “meta 1” y “meta2”.
Resolviendo de izquierda a derecha; es decir empezando por la primera y así
sucesivamente.
Después
Prolog
buscara en orden a través de las metas revisando si la pregunta es igual a un
hecho que se encuentra en la base de conocimiento.
Es decir:
Observamos
que para la meta1 consiste en una relación llamada “legusta”, dos objetos
encerrados en el paréntesis llamado “maria” y X que es una variable. Por otro
lado vemos que en la primer línea de código existe un hecho igual.
La única diferencia es que nuestra meta 1, tenemos una variable. Lo que
hará Prolog será tomar cualquier valor que encuentre en la posición que le corresponde (Ya sea una constante o variable). A esto se le llama instanciar la variable.
En este caso vemos que X se instancia con “chocolate”. Entonces la meta 1 será verdadera.
Una vez que la variable se encuentra instanciada. Prolog, ya tiene un valor asignado a la
variable X. Por lo que la siguiente meta se resolverá de la siguiente manera:
Como
X es chocolate, solo buscará el hecho dentro de la base de conocimiento que le indique que Juan le gusta el chocolate.
Como resulta que esto es verdadero, debido a que ese hecho se encuentra en la línea
2, el resultado de la conjunción (meta 1 y meta2) será verdadero.
Devuelve el valor de X, que es chocolate.
X=chocolate
Si hubiese mas valores dentro de la base de conocimiento, escribiremos un punto y
coma (;) indicando que no nos satisface el resultado, y queremos conocer mas
opciones.