250 likes | 343 Views
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
E N D
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 “_”,