Este documento presenta una práctica de programación lógica en Prolog que consiste en varios ejercicios. El primer ejercicio implica la creación de predicados para representar relaciones familiares en un árbol genealógico. Otros ejercicios tratan sobre la representación de un laberinto y la búsqueda de caminos, así como la formalización de menús para un restaurante.
0 calificaciones0% encontró este documento útil (0 votos)
183 vistas6 páginas
Este documento presenta una práctica de programación lógica en Prolog que consiste en varios ejercicios. El primer ejercicio implica la creación de predicados para representar relaciones familiares en un árbol genealógico. Otros ejercicios tratan sobre la representación de un laberinto y la búsqueda de caminos, así como la formalización de menús para un restaurante.
Este documento presenta una práctica de programación lógica en Prolog que consiste en varios ejercicios. El primer ejercicio implica la creación de predicados para representar relaciones familiares en un árbol genealógico. Otros ejercicios tratan sobre la representación de un laberinto y la búsqueda de caminos, así como la formalización de menús para un restaurante.
Este documento presenta una práctica de programación lógica en Prolog que consiste en varios ejercicios. El primer ejercicio implica la creación de predicados para representar relaciones familiares en un árbol genealógico. Otros ejercicios tratan sobre la representación de un laberinto y la búsqueda de caminos, así como la formalización de menús para un restaurante.
Descargue como PDF, TXT o lea en línea desde Scribd
Descargar como pdf o txt
Está en la página 1de 6
1
Temas Avanzados en Ingeniera
Informtica (I)-Lgica Curso 2011-2012
1. Fecha de entrega
La fecha lmite de entrega ser el 22 de Marzo (jueves) hasta las 20:00 horas.
2. Objetivo
El objetivo de esta prctica consiste en realizar una primera toma de contacto con la Programacin Lgica, y ms concretamente con el lenguaje de programacin Prolog. Para ello, se implementarn varios ejercicios simples que permiten definir bases de hechos (o de conocimiento) y reglas en Prolog.
En esta, y en el resto de las prcticas de la asignatura, podr utilizarse el intrprete SWI-Prolog (http://www.swi-prolog.org/), o el intrprete Prolog de GNU (gprolog, http://ftp.gnu.org/gnu/gprolog/). Tambin puede utilizarse cualquier otro intrprete Prolog que se desee, siempre y cuando, no se utilicen predicados, instrucciones, o procedimientos propios. Las prcticas sern corregidas utilizando SWI- Prolog, o GProlog, por lo que se recomienda la utilizacin de uno de estos dos intrpretes.
Para aquellos que lo deseen, la instalacin en Linux (distribucin Ubuntu) tanto de GProlog como de Swi-Prolog (versin 5.6.14 para Linux), puede realizarse ejecutando desde lnea de comandos:
La prctica se ha dividido en un conjunto de ejercicios bsicos que deben ser implementados y documentados.
3. Descripcin de la prctica
3.1. rboles genealgicos
(a) Se pide buscar un rbol genealgico, real o ficticio, y crear un base de hechos que lo represente y el conjunto de clusulas necesarias que me permitan establecer las relaciones habituales en cualquier familia. Se pide crear (como mnimo) los siguientes predicados:
1. prole(X,Y): cierto, si X es hijo de Y (cualquiera de los dos sexos). 2. hija(X,Y): cierto, si X es hija de Y. 2
3. hijo(X,Y): cierto, si X es hijo varn de Y. 4. progenitor(X,Y): cierto, si X es un progenitor de Y. 5. padre(X,Y): cierto, si X es el padre de Y. 6. madre(X,Y): cierto, si X es la madre de Y. 7. fraterno(X,Y): cierto, si X e Y son hermanos/as. 8. hermano(X,Y): cierto si X es hermano varn de Y. 9. hermana(X,Y): cierto si X es hermana de Y. 10. primo(X,Y): cierto si X e Y son primos (cualquiera de los dos sexos). 11. abuelo(X,Y): cierto si X es abuelo varn de Y. 12. abuela(X,Y): cierto si X es abuela de Y. 13. tio(X,Y): cierto si X es to de Y (tanto carnal como poltico). 14. tia(X,Y): cierto si X es ta de Y (tanto carnal como poltica). 15. suegro(X,Y): cierto si X es suegro de Y. 16. suegra(X,Y): cierto si X es suegra de Y. 17. yerno(X,Y): cierto si X es yerno de Y. 18. nuera(X,Y): cierto si X es nuera de Y. 19. esposo(X,Y): cierto si X e Y estn casados. 20. marido(X,Y): cierto si X es marido de Y. 21. mujer(X,Y): cierto si X es la mujer de Y. 22. varon(X): cierto si X es varn. 23. mujer(X): cierto si X es mujer.
Tambin se disearn clusulas que nos permitan relacionar diferentes familias, por ejemplo:
24. cuniado(X,Y): cierto si X es cuado de Y. 25. cuniada(X,Y): cierto si X es cuada de Y.
Se crearn clusulas de carcter recursivo como:
26. antepasado(X,Y): cierto si X es antepasado de Y. 27. descendiente(X,Y): cierto si X es descendiente de Y. 28. pariente(X,Y): cierto si X e Y son parientes.
(b) Se modificar el programa anterior, para permitir la insercin de nuevos hechos en nuestra base de conocimiento. Como caracterstica bsica se considerar la insercin de este nuevo conocimiento:
"A, cuyos padres son B y C, decide casarse con D (sus padres no son conocidos para nuestra base de hechos). Como efecto de este matrimonio tienen una hija a la que deciden ponerle el nombre de E."
Es decir, podremos ejecutar un predicado desde el intrprete de Prolog (por ejemplo, casados(X,Y)) que aadira automticamente ese conocimiento a la base de hechos.
(c) (opcional) Modificar la base de hechos anterior sobre un caso libre y aplicar los predicados ya definidos. La complejidad de la nueva base de hechos, as como particularidades de la misma (i.e. mltiples padres, mltiples matrimonios) definirn la nota de este apartado.
(d) (opcional) Modificar la base de hechos anterior y permitir la utilizacin de listados familiares para generar representaciones ms compactas de los hechos, modificando adecuadamente las reglas. 3
3.2. Bsqueda en laberintos
(a) Se desea formalizar en PROLOG el diseo de un pequeo laberinto que tenga un nico camino vlido y sin posibilidad de ciclos. nicamente ser posible realizar los siguientes movimientos: arriba, abajo, izquierda y derecha. El laberinto sera el siguiente:
Los hechos del problema sern: o Los pasillos existentes entre dos casillas: pasillo(1,1,1,2), o La salida: salida(1,4) Deber implementar las reglas mover, para moverse hacia arriba, abajo, izquierda y derecha. Puede ser necesaria la implementacin de alguna regla adicional. El objetivo ser: mover(1,1,[paso(1,1)],Solucion) Y devolver: Solucion=[paso(1,1), paso(1,2), paso(2, 2), paso(3, 2), paso(3, 3), paso(4, 3), paso(4, 4), paso(3, 4), paso(2, 4), paso(1, 4)]
(b) (opcional) Se trata de ampliar el programa anterior introduciendo estructuras ms complejas. El nuevo programa deber funcionar para cualquier laberinto (puede tener bucles). Deber devolver el camino ptimo entre una entrada y una salida. El camino ptimo ser aquel que requiere menos pasos. Para optimizar el proceso de bsqueda deber llevar un listado de caminos visitados, para evitar recorrerlos de nuevo.
3.3. Parentesco (OPCIONAL)
El parentesco es el vnculo que liga unas personas con otras (www.iabogado.com/esp/guialegal/guialegal.cfm?IDCAPITULO=01020000). Puede ser de consanguinidad, que sera el vnculo de sangre que une a las personas y el de afinidad, tambin denominado poltico, que sera el que liga a un esposo con los parientes de sangre del otro. Dentro del parentesco de consanguinidad hay que distinguir lo que es la lnea recta (ascendente o descendente) de lo que es la lnea colateral.
Lnea recta. La proximidad del parentesco de consanguinidad se mide por grados, siendo un grado la distancia que hay entre dos personas engendradas una de otra. De una a otra hay una generacin y por 4
tanto cada generacin es un grado. As padre e hijo son parientes en primer grado. Abuelo y nieto hay dos grados, uno entre padre e hijo y otro entre padre y abuelo. Por lo tanto el grado de parentesco entre el nieto y el abuelo es el de segundo grado de consanguinidad en lnea recta.
Lnea colateral. Nos viene dada por aquellas personas que no descienden unas de otras, sino de un antepasado comn (primos entre s, siendo el antepasado comn el abuelo). La medicin o el grado de parentesco se calcula de la siguiente manera. Ascendemos hasta llegar al ms prximo antepasado comn con la otra persona, y luego se baja por la lnea recta descendente que une a este antepasado con la otra cuyo parentesco con la primera se mide. Por lo tanto dos hermanos son parientes en segundo grado de consanguinidad en lnea colateral.
Se pide crear las clusulas correspondientes para poder calcular consang(X,Y,Z),afinidad(X,Y,Z), lrecta(X,Y,Z), lcolat(X,Y,Z).
3.4. Diseo de mens para un restaurante
(a) Se desea formalizar en PROLOG el diseo de mens en un restaurante, para ello se deben construir un conjunto de predicados que contengan los diferentes tipos de alimentos. A partir, de esos predicados se definirn otros que nos permitan construir mens dependiendo del gusto de los posibles clientes. En el siguiente ejemplo damos algunos predicados donde almaceno los distintos alimentos de los que dispone el restaurante:
Un men de este restaurante deber constar de tres platos compuestos por un primer y segundo plato (entrada y plato principal) y de un postre. Deberemos crear por lo menos un predicado que me permita definir un men para vegetarianos, y otro para personas que no deseen incluir nunca pescado en su comida.
vegetarianos(X,Y,Z). X = primer plato, Y = segundo plato, Z = postre. no-pescado(X,Y,Z).
Nota: En el segundo tipo de mens es aconsejable emplear la negacin.
(b) Se trata de refinar el funcionamiento del programa anterior introduciendo estructuras ms complejas. En este apartado debemos de modificar el anterior para poder aadir o eliminar un determinado alimento a su lista de comida, adems modificaremos la base de clusulas para permitir la existencia de sublistas, en estas sublistas introduciremos los valores calricos de cada alimento. Definir el subconjunto de reglas necesarias para poder 5
modificar un conjunto de alimentos, buscar las caloras que contiene un alimento en particular, y crear reglas para definir mens equilibrados.
Se pueden disear otro tipo de sublistas que organicen la informacin de una forma ms conveniente, por ejemplo los pescados podramos definirlos en funcin de la clase a la que pertenecen:
Los nuevos predicados mostrarn, adems de los diferentes mens, el valor calrico total de los mismos.
4. Entrega de la memoria y del programa
La prctica (tanto el cdigo como la memoria) se entregarn en un fichero comprimido como se indica en la pgina de la asignatura, y cuyo nombre debe indicar, el nmero de prctica y el nmero de grupo del que se trata. Se aceptarn ficheros comprimidos zip, rar, tar.gz, o tgz. Ejemplo:
La prctica se entregar utilizando la zona de envo de prcticas de la EPS (http://www.ii.uam.es/esp/alumnos/practicas/envio_practicas.php3). El cdigo fuente entregado tendr todo lo necesario para que se pueda ejecutar los diferentes procedimientos, as como los casos de prueba que se consideren necesarios. El cdigo deber estar adecuadamente comentado.
La memoria constar de las siguientes secciones:
1. Introduccin (una hoja de descripcin de lo que hay que hacer desde vuestro punto de vista y no copiando el enunciado).
6
2. Descripcin a alto nivel de lo realizado: qu predicados se han definido y porqu, qu problema resuelve cada uno de ellos y cmo se relacionan unos con otros, etc.
3. Cdigo fuente completo con comentarios (el cdigo final no debera ser muy largo)
4. Consideraciones sobre la eficiencia del programa, si es que se han tenido en cuenta cuestiones como el orden de las clusulas, orden de los objetivos en los cuerpos, cut,
5. Conclusiones (qu se ha aprendido, dificultades encontradas, comentarios sobre PROLOG, etc.).
6. Medida del esfuerzo del desarrollo de la prctica}, en este ltimo apartado podr mostrarse una tabla donde los alumnos indiquen (de forma aproximada) el nmero de horas dedicadas al desarrollo de la misma. Pueden indicarse los siguientes elementos (u otros que se consideren oportunos): Anlisis del problema, Desarrollo del programa, Diseo de la solucin, Verificacin y Pruebas, Creacin de la documentacin.
5. Criterios de evaluacin
Se valorar:
1. La correccin del programa (que funcione en todos los casos) 2. La claridad del cdigo 3. La claridad de las explicaciones en la memoria 4. Las consideraciones que haya hecho el alumno para mejorar la eficiencia (cambiar el orden de los objetivos, etc.), si estas estn justificadas en la memoria