Post on 11-Apr-2015
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).• no• ?- le gusta_a(maria,libro).• yes• ?- presidente(juan,francia).• no
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))
• 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 “_”,