Story Transcript
Primera pr´actica de Temas Avanzados en Ingenier´ıa Inform´atica (I)-L´ogica Curso 2005-2006 1.
Fecha de entrega
La fecha l´ımite de entrega ser´a el 13 de Marzo (Lunes) hasta las 20:00 horas.
2.
Objetivo
El objetivo de esta pr´actica consiste en realizar una primera toma de contacto con la Programaci´on L´ogica, y m´as concretamente con el lenguaje de programaci´on Prolog. Para ello, se implementar´an varios ejercicios que permiten definir bases de hechos (o de conocimiento) y reglas en Prolog. En esta, y en el resto de las pr´acticas de la asignatura, podr´a utilizarse el int´erprete SWI-Prolog (http://www.swi-prolog.org/), o el int´erprete Prolog de GNU (gprolog, http://ftp.gnu.org/gnu/gprolog/). Tambi´en puede utilizarse cualquier otro int´erprete Prolog disponible, siempre y cuando, no se utilicen predicados, instrucciones, o procedimientos propios. Las pr´acticas ser´an corregidas utilizando SWI-Prolog, por lo que se recomienda su utilizaci´on.
3.
Introducci´ on
La pr´actica se ha dividido en dos bloques, el primero consiste en definir una base de datos de relaciones de parentesco entre personas, y un conjunto de reglas que permite realizar diversas preguntas al int´erprete (definici´on de hechos y reglas en Prolog). El segundo consiste en implementar un programa en PROLOG que permita crear los men´ us en un restaurante (utilizaci´on de listas). El primer bloque es obligatorio, el segundo es de car´acter opcional y se utilizar´a para subir nota.
4. 4.1.
Descripci´ on de la pr´ actica ´ Arboles geneal´ ogicos (a) Dado el siguiente ´arbol geneal´ogico (ver Figura??), crear un base de hechos que lo represente y el conjunto de cl´ausulas necesarias que me permitan establecer las relaciones habituales en cualquier familia. Se pide crear (como m´ınimo) los siguientes predicados:
1
Figura 1: Ejemplo de ´arbol geneal´ogico
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. 3. hijo(X,Y): cierto, si X es hijo var´on 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 var´on 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). 12. abuelo(X,Y): cierto si X es abuelo var´on de Y. 13. abuela(X,Y): cierto si X es abuela de Y. 14. tio(X,Y): cierto si X es t´ıo de Y (tanto carnal como pol´ıtico). 15. tia(X,Y): cierto si X es t´ıa de Y (tanto carnal como pol´ıtica). 16. suegro(X,Y): cierto si X es suegro de Y. 17. suegra(X,Y): cierto si X es suegra de Y. 18. yerno(X,Y): cierto si X es yerno de Y. 19. nuera(X,Y): cierto si X es nuera de Y. 20. esposo(X,Y): cierto si X e Y est´an casados. 21. marido(X,Y): cierto si X es marido de Y. 22. mujer(X,Y): cierto si X es la mujer de Y. 23. varon(X): cierto si X es var´on. 24. mujer(X): cierto si X es mujer. Tambi´en se dise˜ nar´an cl´ausulas que nos permitan relacionar diferentes familias, por ejemplo:
2
25. cuniado(X,Y): cierto si X es cu˜ nado de Y. 26. cuniada(X,Y): cierto si X es cu˜ nada de Y. Se crear´an cl´ausulas de car´acter recursivo como: 27. antepasado(X,Y): cierto si X es antepasado de Y. 28. descendiente(X,Y): cierto si X es descendiente de Y. 29. pariente(X,Y): cierto si X e Y son parientes. (b) Se modificar´a el programa anterior, para permitir la inserci´on de nuevos hechos en nuestra base de conocimiento. Como caracter´ıstica b´asica se considerar´a la inserci´on de este nuevo conocimiento (ver Figura 1):
" Juan, cuyos padres son Pilar y Mario, decide casarse con Sara (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 Sonia." Es decir, podremos ejecutar un predicado desde el int´erprete de Prolog (por ejemplo, casados(X,Y)) que a˜ nadir´ıa autom´aticamente ese conocimiento a la base de hechos. Notas: • El ´arbol geneal´ogico puede ser libremente definido por el alumno (no hay porqu´e restringuirse al ejemplo aqu´ı mostrado. • Con los predicados con los que sea necesario, hay que tener cuidado para que una persona no resulte estar relacionada consigo misma (por ejemplo, hermano(jorge,jorge) = true). • Cuidado con las recursiones infinitas, que se podr´ıan producirse si se introducen reglas del estilo de: hermano(X,Y) :- hermano(Y,X).
4.2.
Dise˜ no de menus para un restaurante (opcional) (a) Se desea formalizar en PROLOG el dise˜ no de men´ us 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 definir´an otros que nos permitan construir men´ us 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: pescados(Besugo,Bacalao,Emperador,Mero,Sardina). carnes(Cerdo,Ternera,Pollo,Pato,Jabali). 3
vegetales(Zanahoria,Lechuga,Repollo,Coliflor,Acelga). Un men´ u de este restaurante deber´a 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´ u 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 men´ us es aconsejable emplear la negaci´on. (b) Se trata de refinar el funcionamiento del programa anterior introduciendo estructuras m´as complejas. En este apartado debemos de modificar el anterior para poder a˜ nadir o eliminar un determinado alimento a su lista de comida, adem´as modificaremos la base de cl´ausulas para permitir la existencia de sublistas, en estas sublistas introduciremos los valores cal´oricos de cada alimento. Definir el subconjunto de reglas necesarias para poder modificar un conjunto de alimentos, buscar las calor´ıas que contiene un alimento en particular, y crear reglas para definir men´ us equilibrados. Ej: pescados([Besugo,300],[Bacalao,350],[Emperador,400],[Mero,200],[Sardina,100]). carnes([Cerdo,700],[Ternera,450],[Pollo,250],[Pato,250],[Jabali,200]). Se pueden dise˜ nar otro tipo de sublistas que organicen la informaci´on de una forma m´as conveniente, por ejemplo los pescados podr´ıamos definirlos en funci´on de la clase a la que pertenecen: pescados([blanco,[Besugo,Emperador,Mero] ,azul,[Sardina,Bonito], marisco,[Langosta,Centollo,Langostino]]). O bien podemos definir una estructura todav´ıa m´as compleja que la anterior, en base a la cual podemos definir nuevos predicados, Ej: pescados([blanco,[[Besugo,300],[Emperador,400],[Mero,200]],azul[[Sardina,100],[Bonito,300]], marisco[[Langosta,150],[Centollo,200],[Langostino,100]]). Los nuevos predicados mostrar´an, adem´as de los diferentes men´ us, el valor cal´orico total de los mismos.
4
5.
Entrega de la memoria y del programa
La pr´actica (tanto el c´odigo como la memoria) se entregar´an en un fichero comprimido (como se indica en la p´agina de la asignatura) y cuyo nombre debe indicar, el no de pr´actica y el no de grupo del que se trata. Se aceptar´an ficheros comprimidos zip, rar, tar.gz, o tgz. Ejemplo: par05prac1.tar.gz, par06prac1.tgz, par02prac1.zip, par04prac1.rar La pr´actica se entregar´a utilizando la zona de env´ıo de pr´acticas de la EPS (http://www.ii.uam.es/esp/alumnos/practicas/envio practicas.php3). El c´odigo fuente entregado tendr´a todo lo necesario para que se pueda ejecutar los diferentes procedimientos, as´ı como algunos casos de prueba. El c´odigo deber´a tener los comentarios necesarios para poder entenderlo. La memoria constar´a de las siguientes partes/secciones: 1. Introducci´on (una hoja de descripci´on de lo que hay que hacer desde vuestro punto de vista y no copiando el enunciado). 2. Descripci´on a alto nivel de lo realizado: qu´e predicados se han definido y porqu´e, qu´e problema resuelve cada uno de ellos y c´omo se relacionan unos con otros, etc. En especial deben describirse aquellos predicados nuevos que hayan sido implementados. 3. C´odigo fuente completo con comentarios (el c´odigo final no deber´ıa ser muy largo) 4. Consideraciones sobre la eficiencia del programa, si es que se han tenido en cuenta cuestiones como el orden de las cl´ausulas, orden de los objetivos en los cuerpos, cut, . . . 5. Conclusiones (qu´e se ha aprendido, dificultades encontradas, comentarios sobre PROLOG, etc).
6.
Criterios de evaluaci´ on Se valorar´a:
1. La correcci´on del programa (que funcione en todos los casos) 2. La claridad del c´odigo 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 est´an justificadas en la memoria
5