Académique Documents
Professionnel Documents
Culture Documents
Introduccin a Prolog
Prolog
El lenguaje de programacin PROLOG
colaboradores alrededor de 1970 en la Universidad de Marseille-Aix. Uno de los principales protagonistas de su desarrollo y promocin fue Robert Kowalski de la Universidad de Edimburgh.
Objetivos
En esta clase se pretende introducir los conceptos bsicos y la forma en que funciona el sistema Prolog.
Paradigma de programacin lgica. Instalacin de Prolog. Componentes de un programa Prolog.
Programacin Imperativa
La programacin tradicional consiste en ejecutar
Programacin declarativa
La programacin en Prolog se conoce como
programacin declarativa.
Consiste en obtener conclusiones vlidas a partir
Primer Orden.
Se utiliza para resolver problemas en los que
Instalacin de Prolog
Existe una gran cantidad de implementaciones
Ejemplo:
?- write(Hola mundo).
preguntas.
El sistema responder utilizando los hechos y
reglas disponibles.
Prolog se basa en los siguientes mecanismos bsicos para responder a las consultas:
Unificacin Estructuras de datos basadas en rboles Backtracking automtico
de Damin. Sin embargo, este orden es arbitrario y cada programador puede darle su propio significado.
relacin a(b,c), aunque para que la interpretacin sea ms sencilla, se recomienda que los nombres se elijan de forma que ayuden a su interpretacin.
Los hechos no tienen que reflejar el mundo real
junto con un conjunto de reglas, forman lo que se llama una base de datos Prolog.
Antes de realizar las consultas se debemos cargar la
base de datos en el sistema. En una plataforma Windows se puede hacer doble click en el archivo .pl
Otra forma de cargar la base de datos es abriendo el
interprete y ejecutando el comando consult/1 (el smbolo / seguido de un nmero indica la aridad de la funcin). ?- consult(C:/ejemplo.pl).
encuentra.
La contestacin NO no implica que el hecho sea falso
(aunque s lo sea para nuestra base de datos), sino que no se puede probar (en general) que sea verdadero con el conocimiento almacenado en la base de datos.
Variables
Para realizar preguntas ms interesantes, como por ejemplo, qu le gusta a Mara o cules son los padres de Damin, se usarn las variables.
En Prolog las variables empiezan por mayscula.
base de datos hasta encontrar el primer hecho que coincide con el nombre de la relacin y su aridad y con los argumentos que no son variables.
La o las variables se instancian al valor que le
corresponde segn el lugar que ocupan en la relacin, y ese valor es la respuesta que proporciona Prolog.
Si pulsamos RETURN no obtendremos ms que la
primera respuesta.
Si se quieren obtener todas las respuestas (para el
Backtracking
Cuando pulsamos ;, Prolog sigue automticamente
pregunta. Se desinstancian las variables que se haban instanciado, y sigue buscando otro hecho que coincida sintcticamente con la pregunta.
A este mecanismo se le llama backtracking, y Prolog
lo hace automticamente.
Conjuncin de objetivos
Si necesitamos hacer preguntas mas complejas, por ejemplo:
Se gustan Juan y Mara? Tienen Ana y Damin un progenitor comn, es decir, son
hermanos? Quin es el nieto(s) de Toms? Se utilizan conjunciones de objetivos, es decir, preguntas separadas por comas. En Prolog las comas corresponden a la Y lgica. Por ejemplo:
?-le_gusta_a(juan,maria), le_gusta_a(maria,juan). ?-progenitor(X,ana), progenitor(X,damian). ?-progenitor(tomas,X), progenitor(X,Y).
la misma pregunta, la misma variable se refiere al mismo objeto (en el segundo ejemplo, X se refiere a la misma persona).
En preguntas u objetivos distintos, el mismo nombre
de variable se refiere a distintos objetos (la X del segundo y el tercer ejemplo se refieren a personas distintas).
Para buscar las soluciones a una conjuncin de
objetivos, Prolog establece una marca de posicin para cada objetivo, y recorre toda la base de datos en la bsqueda de cada objetivo.
Ejemplo
Suponemos definida la siguiente base de datos de relaciones familiares: progenitor(clara,jose). progenitor(tomas, jose). progenitor(tomas,isabel). progenitor(jose, ana). progenitor(jose, patricia). progenitor(patricia,jaime). Para demostrar si Clara es bisabuela de Jaime, utilizaramos la siguiente conjuncin de objetivos:
?-progenitor(clara,X), progenitor(X,Y),
condicional.
El cuerpo puede ser una conjuncin de objetivos separados por
comas.
Para demostrar que la cabeza de la regla es cierta, se tendr que
cuerpo.
Las preguntas slo tienen cuerpo. Las reglas tienen siempre cabeza y cuerpo. Los hechos son siempre ciertos. Las reglas declaran cosas que son ciertas dependiendo de
una condicin.
El programa Prolog est formado por hechos y reglas y para
Reglas Recursivas
Queremos definir la relacin predecesor(X,Y). Un
predecesor de X podr ser el progenitor de X. Tambin ser predecesor si es abuelo/a, si es tatarabuelo/a, etc.
predecesor(X,Y):-progenitor(X,Y). predecesor(X,Y):-progenitor(X,Z), progenitor(Z,Y). predecesor(X,Y):-progenitor(X,Z), progenitor(Z,V), progenitor(V,Y).
En este ejemplo la definicin de este conjunto de reglas es infinito, nunca terminaramos de escribirlo. La siguiente regla recursiva nos permitir definirlo. predecesor(X,Y):-progenitor(X,Y). predecesor(X,Y):-progenitor(X,Z), predecesor(Z,Y).
La primera definicin de predecesor corresponde al caso ms
otra, se halla en la base de datos que la primera persona es progenitora de la segunda, se habr demostrado y Prolog responder que s. En caso contrario, se intentar demostrar que es predecesor utilizando la segunda regla, que contiene la llamada recursiva.
La sintaxis Prolog
Los objetos o trminos Prolog pueden ser objetos simples o
estructuras.
Los objetos simples pueden ser constantes o variables. Las constantes sern tomos o nmeros. Los tomos empiezan con letra minscula (nunca con
nmeros), pueden contener caracteres especiales y pueden ser nombres entre comillas simples.
Los nmeros sern enteros o reales, sin una definicin
explcita de tipos.
Las variables empiezan con mayscula o con subrayado.
Variables annimas
Las variables annimas son aquellas cuyo nombre es slo el
nombre de la variable o cuando la variable no puede unificar con otra, dentro de la misma clusula. Por ejemplo: tiene_un_hijo(X):-progenitor(X,Y).
Y no unifica con otra variable en la definicin de la relacin
de los hechos.
Los funtores de las estructuras son los nombres
Unificacin
La operacin ms importante sobre trminos es la unificacin. Dos trminos pueden unificarse si son idnticos o las
variables de ambos trminos pueden instanciarse a objetos tales que despus de la sustitucin de las variables por esos objetos, los trminos sean idnticos. Ejemplos
fecha(D,M,1998) = fecha(D1,mayo,A) piloto(A,Londres) = piloto(londres,paris) punto(X,Y,Z) = punto(X1,Y1,Z1) f(X,a(b,c)) = f(Z,a(Z,c))
Conclusin
Hemos visto los tres elementos esenciales para la
Genoma Humano.
El anlisis y la medicin de las redes sociales. Est siendo utilizado como la base para lenguaje de
representacin del conocimiento estndar para la Web Semntica , la siguiente generacin de tecnologa para Internet . investigadores en Inteligencia Artificial. Existen muchas aplicaciones desarrolladas en este campo, especialmente los llamados Sistemas Expertos, que son