Queries

Queries: forma de obtener información de un programa lógico.

Un querie pregunta si se cumple alguna relación entre objetos.

Un hecho dice que P es verdadero.
Una querie pregunta si P es verdadero.

Las preguntas también son ``metas''.

?- papa(juan,juana).
yes
?- suma(1,1,2).
no               (si no esta definido)

El contestar una pregunta es determinar si la pregunata es una consecuencia lógica del programa.

Las consecuencias lógicas se obtienen aplicando reglas de inferencia.

Preguntar usando variables es como construir muchas preguntas a la vez.

Una pregunta con variables, pregunta si existe un valor para las variables que haga la pregunta una consecuencia lógica del programa.

Si queremos preguntar quien es el papá de ana:

?- papa(juan,ana).
?- papa(juanito,ana).
?- papa(maria,ana).
...
?- papa(rival,ana).

Podemos hacerlo también como:

?- papa(X,ana).
X = rival
Pregunta por instancias de $X$ que hacen que se cumpla la relación.

Las variables en lógica (entidades sin especificar) son diferentes de las variables en programas convencionales (localización en memoria).

Pueden existir varias soluciones (instancias)

?- mama(maria,X).
X = juana;
X = juanito:
X = ana;
no
Suponiendo que tenemos la tabla de ``suma'':
?- suma(X,Y,4).
X = 0, Y = 4;
X = 1, Y = 3;
X = 2, Y = 2;
X = 3, Y = 1;
X = 4, Y = 0;
no

?- suma(X,X,4).
X = 2

Pueden existir variables en hechos. En lugar de tener que declarar algo que sucede para todos, e.g.:

gusta(juan,mole).
gusta(juana,mole).
gusta(juanito,mole).
...
gusta(rival,mole).
Podemos tener variables en los hechos (e.g., a todos les gusta el mole):
gusta(X,mole).

mult(0,X,0).
?- mult(0,4,0).
yes

suma(0,X,X).
?- suma(0,2,2).
yes
?- suma(0,3,Y).
Y = 3.

También podemos hacer varias preguntas a la vez:

?- papa(juan,juanito), papa(juanito,pepe).
yes

?- papa(juan,X), papa(X,pepe).
i.e., existe una persona que sea hijo de juan y papá de pepe?
X = juanito

?- papa(juan,X), papa(X,Y).
i.e., dame los nietos de juan.
X = juanito, Y = pepe;
X = juanito, Y = patricia;
no
Lo podemos restringir: ?- papa(juan,X), hombre(X).

emorales 2012-05-03