En esta actividad estudiaremos tres ejemplos de Prolog orientados al desarrollo de aplicaciones prácticas: bases de datos, matemáticas e inteligencia artificial.
4.1 Recuperación de la información estructurada de una base de datos
(A). Estudiar el Programa: la base de datos inicial y los procedimientos que se van adicionando al programa.
Este ejemplo muestra cómo representar y manipular objetos de datos estructurados y también sirve para ejemplificar el uso de Prolog como un lenguaje natural de consulta a bases de datos. Una base de datos se puede representar en Prolog como un conjunto de hechos. Por ejemplo, una base de datos acerca de familias: cada familia se representa con una sola cláusula y tiene tres componentes: Esposo, Esposa e Hijos. El número de hijos es variable y se debe representar con una lista. A su vez cada persona (esposo, esposa ó hijo) tienecuatro componentes: nombre, apellido, fecha de nacimiento y trabajo :
En Prolog
familia(
persona(juan,perez,fecha(7,mayo,1950),trabaja(uag,2000)),
persona(ana,flores,fecha(9,mayo,1951),no_trabaja),
[persona(jose,perez,fecha(5,mayo,1973),no_trabaja),
persona(susana,perez,fecha(5,junio,1975),no_trabaja)
]).
familia(
persona(jorge,flores,fecha(21,abril,1953),trabaja(uag,2500)),
persona(edith,juarez,fecha(5,enero,1960),no_trabaja),
[persona(pedro,flores,fecha(1,julio,1980),no_trabaja)
]).
% X es esposo.
esposo(X) :- familia(X,_,_).
% X es esposa.
esposa(X) :- familia(_,X,_).
% X es hijo.
hijo(X) :- familia(_,_,Hijos), miembro(X,Hijos).
miembro(X, [X|L]).
miembro(X, [Y|L]) :- miembro(X, L).
% Existencia de una persona en la base de datos.
existe(Persona) :- esposo(Persona); esposa(Persona); hijo(Persona).
% Fecha de nacimiento
fecha_de_nacimiento(persona(_,_,Fecha,_), Fecha).
% Salario de una persona.
salario(persona(_,_,_,trabaja(_,S)),S).
salario(persona(_,_,_,no_trabaja),0).
% Ingreso total de una familia.
total([],0).
total([Persona|Lista],Suma) :- salario(Persona,S),
total(Lista,Resto), Suma is S + Resto.
(B). Cargar el programa en Swi-Prolog y estudiar y probar las preguntas de ejemplo.
1). Encontrar Nombre y Apellido de todas las personas que existen en la
Base de Datos:
2). Encontrar Nombre y Apellido de todas las esposas que no trabajan:
3). Encontrar todos los hijos que hayan nacido en 1975:
4). Hallar los nombres de todas las madres que tienen al menos dos hijos:
5). Encontrar todos los nombres de las personas desempleadas que nacieron después de
1970:
6). Hallar todas las personas nacidas antes de 1955 cuyo salario sea menor a 2500:
7). El ingreso total por familia:
8). Todas las familias que tengan un ingreso por miembro de familia menor a 1000.
(C). Resuelva usted solo los 5 ejercicios.
a). Nombres de las familias que no tienen hijos.
familia(Esposo,Esposa,[]).
b). Nombres de todos los hijos que no trabajan.
hijo(X), salario(X,0).
c). Nombres de las familias con esposas que trabajan y esposos que no trabajan.
familia(Y,Esposa,_), salario(Y,0).
Ayuda Fuente: http://cocolibre.blogspot.mx/2013/04/ia-con-prolog-actividad-c41-usando.html
d). Todos los hijos cuyos padres difieren en edad con al menos 10 años.
familia(Espo,Espa,Hijos), fecha_nacimiento(Espo,fecha(_,_,A1)), fecha_nacimiento(Espa,fecha(_,_,A2)), A2-A1 > 9, Hijos \= [].
e). Definir la relación: gemelos(Hijo1, Hijo2) que sirva para encontrar geme-los en la
base de datos.
gemelos(H1,H2).
4.2 Simulación de un autómata no determinístico.
(A). Investigue (Internet, libros, publicaciones,…) y escriba una entrada en su blog explicando con sus propias palabras y ejemplos qué es un autómata no determinístico. Recuerde que al incluir texto o imágenes o video o audio de otras fuentes debe entrecomillar y escribir la referencia documental de lo que incluye.
AUTÓMATA FINITO DETERMINÍSTICO (AFD).
Es un modelo matemático que consiste de :
- Un conjunto de estados, denominado S
- Un conjunto ( alfabeto) de símbolos de entrada, denominado ∑.
- Una función de transición move que mapea un par P ( s , a ) a un estado t.
- s y t son estados contenidos en S, a es un símbolo de entrada.
- Un estado de inicio, denotado por s(sub)0.
- Un conjunto de estados de aceptación (finales), denotado por F.
.
Además, un autómata finito determinístico AFD debe cumplir con las siguientes características:
a) No hay transiciones etiquetadas por ∈.
b) Para cada estado s y un símbolo de entrada a, existe a lo más un arco etiquetado por a
saliendo de s
http://www.monografias.com/trabajos-pdf/automatas-finitos/automatas-finitos.pdf
(C). Probar el Programa en Swi-Prolog y los ejemplos de ejecución.
a). La cadena de entrada aaab a partir de s1:
b). A partir de qué estados acepta la cadena ab:
c). Cuáles son todas las cadenas de longitud tres que pueden ser aceptadas a partir del
estado s1 ?
d). Si la salida se desea escrita en forma de lista.
4.3 El problema de las ocho reinas (ajedrez)
Implementación del problema de las N-Reinas en Prolog (programación lógica)
Una implementación sencilla del problema de las n-reinas en Prolog consiste en tres simples pasos:
- Generar un tablero de dimensión n.
- Generar una permutación sobre ese tablero.
- Comprobar si ese tablero cumple la condición de que todas las reinas colocadas no se amenacen entre sí. ...
http://programacionilogica.wordpress.com/2008/02/07/implementacion-del-problema-de-las-n-reinas-en-prolog/
Muy buena explicacion...