HSE-96: practica-05.txt Patrones y reglas en Clips, II. =============================================================================== ******************************************************************************* * OBSERVACIONES: ******************************************************************************* La siguiente práctica consta de tres ejercicios totalmente independientes entre si. El código correspondiente al primer ejercicio se almacenará en el fichero "areas.clp", el correspondiente al segundo ejercicio en el fichero "sensores.clp" y el correspondiente al tercero en el fichero "permutaciones.clp". Se proporcionan los ficheros "areas.clp" y "sensores.clp" en los que se incluyen, respectivamente, parte del código del primer y del segundo ejercicio. ******************************************************************************* * PROBLEMA 1: Incluirlo en el fichero "areas.clp" proporcionado. ******************************************************************************* Dada una serie de hechos que describen figuras, con las siguientes plantillas: (deftemplate cuadrado (slot nombre (type SYMBOL) (default ?NONE)) (slot base (type FLOAT) (default ?NONE))) (deftemplate rectangulo (slot nombre (type SYMBOL) (default ?NONE)) (slot base (type FLOAT) (default ?NONE)) (slot altura (type FLOAT) (default ?NONE))) (deftemplate circulo (slot nombre (type SYMBOL) (default ?NONE)) (slot radio (type FLOAT) (default ?NONE))) Escribir una o más reglas que calculen la suma de: - Todas las áreas de las figuras. - Todos los perímetros de las figuras. y almacenen los resultados en hechos de la forma "(area )" y "(perimetro )" Comprobar la salida con el siguiente conjunto de hechos: (deffacts figuras (cuadrado A 3) (cuadrado B 5) (rectangulo C 5 7) (circulo D 2)) Ejemplo: Con el conjunto de hechos proporcionado, se tendría que obtener: CLIPS> (load "areas.clp") CLIPS> (reset) CLIPS> (run) CLIPS> (facts) f-0 (initial-fact) f-1 (cuadrado (nombre A) (base 3.0)) f-2 (cuadrado (nombre B) (base 5.0)) f-3 (rectangulo (nombre C) (base 5.0) (altura 7.0)) f-4 (circulo (nombre D) (radio 2.0)) f-18 (valor-perimetro 68.56637061435917) f-22 (valor-area 81.56637061435917) For a total of 7 facts. ******************************************************************************* * PROBLEMA 2: Incluirlo en el fichero "sensores.clp" proporcionado. ******************************************************************************* En una planta industrial hay diez sensores enumerados del 1 al 10. Cada sensor puede dar el mensaje "correcto" o "incorrecto". Utilizando la plantilla proporcionada para representar los sensores, escribir una o más reglas que impriman en pantalla un mensaje si 3 o más sensores dan el mensaje "incorrecto". Crear una declaración "deffacts" en la que se incluyan todos los sensores con el mensaje "correcto" por defecto. Cargar el programa en CLIPS y probarlo en los siguientes casos: - Los sensores 3 y 5 dan el mensaje "incorrecto". - Los sensores 2, 8 y 9 dan el mensaje "incorrecto". - Los sensores 1, 3, 5 y 10 dan el mensaje "incorrecto". utilizando el comando "modify" para modificar el contenido de los hechos. Ejemplo: Con el conjunto de hechos proporcionado, se tendría que obtener: CLIPS> (load "areas.clp") CLIPS> (reset) CLIPS> (facts) f-0 (initial-fact) f-1 (sensor (identificador 1) (estado correcto)) f-2 (sensor (identificador 2) (estado correcto)) f-3 (sensor (identificador 3) (estado correcto)) f-4 (sensor (identificador 4) (estado correcto)) f-5 (sensor (identificador 5) (estado correcto)) f-6 (sensor (identificador 6) (estado correcto)) f-7 (sensor (identificador 7) (estado correcto)) f-8 (sensor (identificador 8) (estado correcto)) f-9 (sensor (identificador 9) (estado correcto)) f-10 (sensor (identificador 10) (estado correcto)) f-11 (planta-industrial correcto) For a total of 12 facts. CLIPS> (modify 3 (estado incorrecto)) CLIPS> (modify 5 (estado incorrecto)) CLIPS> (run) CLIPS> (reset) CLIPS> (modify 2 (estado incorrecto)) CLIPS> (modify 8 (estado incorrecto)) CLIPS> (modify 9 (estado incorrecto)) CLIPS> (run) El estado de la planta industrial es incorrecto. CLIPS> (reset) CLIPS> (modify 1 (estado incorrecto)) CLIPS> (modify 3 (estado incorrecto)) CLIPS> (modify 5 (estado incorrecto)) CLIPS> (modify 10 (estado incorrecto)) CLIPS> (run) El estado de la planta industrial es incorrecto. ******************************************************************************* * PROBLEMA 3: OPCIONAL. Incluirlo en el fichero "permutaciones.clp". ******************************************************************************* Escribir una o más reglas que generen todas las permutaciones de una lista de elementos. Por ejemplo para la lista (rojo verde azul) se tendría que generar la salida: (rojo verde azul) (rojo azul verde) (verde azul rojo) (verde rojo azul) (azul rojo verde) (azul verde rojo) aunque no necesariamente en dicho orden. Cargar el programa en CLIPS y ejecutarlo para permutar la lista (rojo verde azul). Ejemplo: Con el conjunto de hechos proporcionado, se tendría que obtener: CLIPS> (load "permutaciones.clp") CLIPS> (reset) CLIPS> (run) (rojo azul verde) (azul rojo verde) (azul verde rojo) (verde azul rojo) (verde rojo azul) (rojo verde azul) ******************************************************************************* * IMPORTANTE: ******************************************************************************* Una vez finalizados todos los apartados anteriores, envía por correo electrónico a tu profesor los ficheros "areas.clp" (con Subject: Practica 5 (areas.clp)) "sensores.clp" (con Subject: Practica 5 (sensores.clp)) "permutaciones.clp" (con Subject: Practica 5 (permutaciones.clp)) Recuerda, las direcciones son: fmartin@cs.us.es si tu profesor es F. J. Martín. jalonso@cs.us.es si tu profesor es J. A. Alonso.