Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica formal, demostrador de teoremas lógicos Programación declarativa
Hechos le_gusta_a(juan,maria). Comienzan con minúsculas Relación, objetos entre paréntesis separados por comas Punto al final El orden de los argumentos es relevante Terminología: argumentos, predicado
Hechos valioso(oro). hembra(ana). tiene(juan,oro). padre(juan,maria). da(juan,libro,maria).
Preguntas ?- tiene(maria,libro). Responde sí o no. no, no es lo mismo que falso, es que no se puede probar
Preguntas le_gusta_a(jose,pescado). le_gusta_a(jose,maria). le_gusta_a(maria,libro). le_gusta_a(juan,libro).
Preguntas ?- le gusta_a(jose,dinero). no ?- le gusta_a(maria,jose). ?- le gusta_a(maria,libro). yes ?- presidente(juan,francia).
Variables Es pesado preguntar ¿le gustan a juan los libros? ¿le gusta a Juan María? Es más sensato pedir a prolog que nos diga qué le gusta a Juan. Esto en prolog es como preguntar ¿le gusta a Juan X? ?- le_gusta_a(juan,X) Un variable puede estar instanciada o no instanciada
Variables Comienzan por mayúscula La búsqueda en los hechos se realiza en el orden en que se introdujeron, las variables se van instanciando y se marcan las posiciones Por defecto una búsqueda (return), pero se pueden forzar más (; y return) siguiendo por donde se quedó.
Conjunciones ej: ¿se gustan juan y maria? ?- le_gusta_a(juan,maria), le_gusta_a(maria,juan). Se separan por comas, que se leen como “y”. Intenta satisfacer los objetivos por orden Las conjunciones y las variables se pueden conjugar para hacer preguntas más interesantes.
Conjunciones ej: ¿hay algo que le guste tanto a juan como a maria? ?- le_gusta_a(juan,X), le_gusta_a(maria,X). Cada objetivo guarda su propia marca de posición Reevaluación (backtracking). si una variable se instancia, se instanciará en todos los lugares de la pregunta en los que aparezca la variable.
Reglas Regla frente a lista de hechos Reglas para expresar definiciones ej: X es un pájaro si: X es un animal, y X tiene plumas X es hermana de Y si: X es hembra, y X e Y tienen los mismos padres
Reglas Una variable representa el mismo objeto siempre que aparece en una regla Una regla es una afirmación general sobre objetos y sus relaciones En prolog una regla se compone de una cabeza y un cuerpo unidos mediante “:-“, que se pronuncia “si”
Reglas La cabeza describe qué hecho es el que la regla intenta definir El cuerpo describe la conjunción de objetivos que deben satisfacerse, uno tras otro, para que la cabeza sea cierta ej: le_gusta_a(juan,X):- le_gusta_a(X,vino). ej: le_gusta_a(juan,X):- le_gusta_a(X,vino), le_gusta_a(X,comida).
Reglas ej: le_gusta_a(juan,X):- hembra(X), le_gusta_a(X,vino). Siempre que una variable X se instancia a algún objeto, todas las X se instancian dentro del ámbito de X. Para un determinado uso de una regla el ámbito de X es toda la regla, incluyendo la cabeza, y hasta el punto final de la regla
Reglas varon(albert). varon(edward). hembra(alice). hembra(victoria). padres(edward,victoria,albert). padres(alice,victoria,albert).
Reglas hermana_de(X,Y):- hembra(X), padres(X,M,P), padres(Y,M,P). Un predicado estará definido por una mezcla de hechos y de reglas. A unos y otras se las denomina como cláusulas de un predicado
Reglas ladron(juan). le_gusta_a(maria,comida). le_gusta_a(maria,vino). le_gusta_a(juan,X):- le_gusta_a(X,vino). puede_robar(X,Y):- ladron(X), le_gusta_a(X,Y).
Estructuras Functor y componentes ej: tiene(juan, libro ( cumbres_borrascosas, autor (emily,bronte))). Pueden participar en el proceso de pregunta-respuesta con variables ej: tiene(juan,libro(X,autor(Y,bronte))). Todos los elementos de prolog están formados por constantes, variables y estructuras
Operadores 3+4 <=> +(3,4) x+y*z <=> +(x,*(y,z)) 3+4 <=> +(3,4) x+y*z <=> +(x,*(y,z)) El resultado de las operaciones aritméticas se asigna con “is” ej Y is X + Y. Igualdad X = Y, prolog intenta hacer coincidir X e Y. X \= Y, X < Y, X > Y, ...
Coincidencia (matching) Una variable sin instanciar coincide con cualquier objeto Un entero o un átomo sólo coindicidirá con él mismo Una estructura conincidirá con otra con el mismo functor y número de argumentos, debiendo coincidir todos los argumentos correspondientes.
Estructuras de datos: árboles padres(carlos,isabel,felipe). frase ( nombre (juan), sintagma_verbal (verbo(come), nombre (pan))).
Estructuras de datos: listas Secuencia ordenada de elementos Los elementos de una lista pueden ser cualquier término (constantes, variables, estructuras) incluyendo otras listas. [] lista vacía [los, hombres, [van, a, pescar]] [a,V1,b,[X,Y]]
Estructuras de datos: listas Las variables de una lista se tratan como si estuvieran en cualquier otra estructura Cabeza: primer elemento de la lista Cola: lista que contiene todos los elementos menos el primero lista: [a,b,c] cabeza: a cola: [b,c]
Estructuras de datos: listas Notación [X|Y], lista con cabeza X y cola Y. Esto instanciará X a la cabeza de la lista e Y a la cola. miembro(X, [X|_]). miembro(X, [_|Y]):- miembro(X,Y). ?- miembro(d, [a,b,c,d,e,f,g]). yes Variable anónima “_”,