Ejercicios Clips

download Ejercicios Clips

of 14

Transcript of Ejercicios Clips

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOSUniversidad del Per, Decana de Amrica)

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA

Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica

Inteligencia Artificial

Profesor:Mauricio Sanchez, David

Tema:Ejercicios Resueltos en CLIPS

Ciclo:2013-1

1. Cree una plantilla de pacientes que tenga los siguientes campos y datos:CAMPOTIPO DE DATOVALOR POR DEFECTOSIMBOLO PERMITIDO

NombreString

ApellidosSymbol

EdadInteger30

SexoSymbolV v M

Volumen PulmonarFloat25

EstadoSymbolbajaAlta baja

Resolucin:

Se usar el comando deftemplate para la creacin de la plantilla en este caso llamado paciente, para luego ingresar el nombre de cada campo(s) (slot o multislot) seguido del tipo de dato (type), su valor por defecto (default), smbolos permitidos (alowed-symbols).

CLIPS>(deftemplate paciente (slot nombre (type STRING) (default ?DERIVE)) (multislot apellidos (type SYMBOL) (default ?DERIVE)) (slot edad (type INTEGER) (default 30)) (slot sexo (type SYMBOL) (allowed-symbols V v M m)) (slot volumen_pulmonar (type FLOAT) (default 2.5)) (slot estado (type SYMBOL) (default baja) (allowed-symbols alta baja)))

2. Crear una funcin que sume 2 nmeros.

(deffunction suma(?a ?b)(bind ?suma (+ ?a ?b))(printout t "Suma =" ?suma crlf)(+ ?a ?b))

Resolucin:

Se crear una funcin (deffunction) llamada suma el cual reciba como parmetro dos nmeros (?a ?b), estas variables sern sumadas, el valor de dicha suma ser guardada en la variable local suma , para ser impresa haciendo uso del printout o la impresin inmediata de la suma sin hacer uso de ninguna variable (+ ?a ?b).

3. Crear una funcin que halle la hipotenusa de un tringulo rectngulo ingresando sus catetos.

(deffunction hipotenusa (?a ?b)(sqrt (+ (* ?a ?a) (* ?b ?b))))

Resolucin:

Se utilizar una funcin (deffunction) llamada hipotenusa el cual reciba como parmetro dos nmeros (?a ?b), estas variables sern multiplicada, para luego ser sumadas y por ultimo extraer su raz cuadrada (sqrt).

4. Crear una funcin que muestre una secuencia de nmeros anteriores al nmero ingresado.

Resolucin:

Se crear una funcin (deffunction) llamada iteraction el cual reciba como parmetro a un nmero, para el desarrollo de la funcin se har uso de una variable local (i) inicializado con 0. Se utilizar el bucle (while) el cual verificar si el parmetro es menor o igual a la variable local, caso contrario imprimir el valor de la variable continuando con el bucle.

(deffunction iteracion (?numero) (bind ?i 0) (while TRUE do (if (>= ?i ?numero) then (break)) (printout t ?i " ") (bind ?i (+ ?i 1)) ) (printout t crlf) )

5. Cree una funcin en donde te indique si un alumno esta aprobado o desaprobado, adems de ello enviar una observacin.

Resolucin:

Para este problema se usar la funcin deffunction cuyo nombre de la funcin ser calif_alumno, para la elaboracin de ello se uso condicionales.(deffunction calif_alumno(?n)(if(> ?n 11)then(printout t "Esta aprobado ,su nota es : " ?n " Excelente" crlf))(if(< ?n 10.5)then(printout t "Esta desaprobado, su nota es : " ?n " Pesimo" crlf))(if(= ?n 10.5)then(printout t "Esta aprobado ,su nota es :" ?n " Necesita apoyo" crlf)))

6. Construir una regla que muestre el cuadrado de un nmero

Resolucin:

Se utiliza la funcin deffuncion y luego se procede a multiplicar la variable dos veces para conseguir su cuadrado.

CLIPS>(deffunction cuadrado (?x) (* ?x ?x))CLIPS>(printout t (cuadrado 3) crlf)

7. Realice todas las operaciones (suma, resta, multiplicacin y divisin).Mediante la funcin deffunction. Ejemplo ingrese los valores 8 y 4.

Resolucin:

Para el desarrollo del problema se uso el comando deffunction cuyo nombre de la funcin es operaciones.

(deffunction operaciones(?a ?b)(bind ?suma (+ ?a ?b))(printout t "suma = " ?suma crlf)(bind ?resta (- ?a ?b))(printout t "resta = " ?resta crlf)(bind ?mult (* ?a ?b))(printout t "Multiplicacion = " ?mult crlf)(bind ?division (/ ?a ?b))(printout t "Division = " ?division crlf)

)

8. Con el ejemplo anterior ingrese ms pacientes mediante la funcin assert, y luego muestre todos los pacientes ingresados.

Resolucin:Basndonos del ejemplo anterior y ya teniendo una plantilla de paciente, ingresaremos mas paciente usando la funcin o comando assert y al final mostraremos todos los pacientes, mediante el comando facts.

(deftemplate paciente(slot nombre)(slot apellido)(slot edad)(slot sintoma))CLIPS> (assert (paciente(nombre "maria")(apellido "torres")(edad 15)(sintoma "gripe")))(assert (paciente(nombre "isabel")(apellido "lopez")(edad 25)(sintoma "fiebre")))(facts)f-0 (initial-fact)f-1 (paciente (nombre "maria") (apellido "torres") (edad 15) (sintoma "gripe"))f-2 (paciente (nombre "isabel") (apellido "lopez") (edad 25) (sintoma "fiebre"))

9. Muestre todos los hechos del 0 al 1, luego muestre solo 1 hecho. Adems de ellos elimine uno de ellos y modifique .Al final muestre todos los hechos dados con sus respectivos cambios.

Resolucin:Para la solucin de este problema hemos usado los comando modify ,este comando nos permitir realizar algunos cambios de algunos datos de nuestro paciente, y el comando retract nos permitir eliminar algn paciente que ya no queremos en lista.(facts 0 1)f-0 (initial-fact)f-1 (paciente (nombre "maria") (apellido "torres") (edad 15) (sintoma "gripe"))For a total of 2 facts.

(facts 1)f-1 (paciente (nombre "maria") (apellido "torres") (edad 15) (sintoma "gripe"))f-2 (paciente (nombre "isabel") (apellido "lopez") (edad 25) (sintoma "fiebre"))For a total of 2 facts.CLIPS> (retract 1)CLIPS> (facts)f-0 (initial-fact)f-2 (paciente (nombre "isabel") (apellido "lopez") (edad 25) (sintoma "fiebre"))For a total of 2 facts.

(modify 2 (edad 20))

CLIPS> (facts)

f-0 (initial-fact)f-3 (paciente (nombre "isabel") (apellido "lopez") (edad 20) (sintoma "fiebre"))For a total of 2 facts.

10. Realice una funcin que calcule la factorial de un nmero ingresado.Resolucin: Se implementar la funcin (deffunction) factorial el cual recibir un parmetro, se verificar si dicho valor es vlido, es decir si se trata de un entero positivo (caso contrario se imprimir un mensaje de error). Sea el caso de tratarse de un entero positivo se continuar a verificar si es de valor 0, de no tratarse ese valor se llamar de nuevo a la funcin pero con el parmetro disminuido en una unidad.

(deffunction factorial (?a) (if (or (not (integerp ?a)) (< ?a 0)) then (printout t "Factorial Error!!" crlf) else (if (= ?a 0) then 1 else (* ?a (factorial (- ?a 1))))))

11. Implementar una funcin que suma los nmeros naturales hasta el nmero ingresado usando recursividad

Resolucin:

Se proceder a crear una funcin llamada sumaRecursiva donde se tendr como parmetro el nmero lmite de la suma. Se comenzar a verificar si el nmero que recibe como parmetro es 0, en el caso que lo sea, la variable local a tomar el valor de 0, caso contrario tomar el valor del parmetro prosiguiendo a llamar nuevamente a la funcin sumaRecursiva pero con el valor del parmetro disminuido en 1.

(deffunction sumaRecursiva (?x)(if (= ?x 0)then(bind ?a 0)else(bind ?a ?x)(+ ?a (sumaRecursiva (- ?x 1)))))

A continuacin se muestra un propuesto para el control de laboratorio de CLIPS del da: martes, 4 de junio del 2013.

Control de Laboratorio - CLIPS

1. Defina las siguientes funciones(8 puntos)(bebe nombre edad): imprime nombre es bebe si edad es de 0 a 4 aos(ninno nombre edad): imprime nombre es nio si edad es de 5 a 12 aos(adolecente nombre edad): imprime nombre es adolecente si edad es de 13 a 18 aos(joven nombre edad): imprime nombre es adolecente si edad es de 19 a 33 aos(adulto nombre edad): imprime nombre es adulto si edad es de 34 a 65 aos(anciano nombre edad): imprime nombre es anciano si edad es mayor de 65 aosLuego defina una funcin era que llame a las anteriores. EjemploSi (era Juan 23)Muestra:Juan es joven

2.Defina una funcin iterativa o recursiva que implemente un dibujo de un rectngulo de m filas y n columnas(7 puntos)Ejemplo: (Rectangulo 5 3)Resultado:***************

3. Ejercicios de hechos.(5 puntos)A. Defina la plantilla que permita almacenar hechos sobre animales. Para esto, se deber saber a qu clase pertenece (mamferos, peces, reptiles, etc) y el nombre del animal.B. Ingrese los siguientes hechos, a la lista de hechos.Animales:Peces: trucha, mono, tortuga.Mamferos: serpiente, ratn, paloma.Reptiles: perro, cocodrilo, atn.C. Modifique los hechos de tal forma que los animales se encuentren en la clasificacin que les corresponde. Elimine de la lista de hechos a los animales que no se encuentran entre esas clasificaciones. Por ltimo, liste los hechos despus de las modificaciones. Use los comandos adecuados (assert, modify, retract)

2