147750057 Ejercicios Clips

14
Universidad Nacional Mayor de San Marcos Facultad de Ingeniería de Sistemas e Informática Inteligencia Artificial Profesor: Mauricio Sanchez, David Tema: Ejercicios Resueltos en CLIPS Ciclo: 2013-1

description

doc

Transcript of 147750057 Ejercicios Clips

Page 1: 147750057 Ejercicios Clips

Universidad Nacional Mayor de San Marcos

Facultad de Ingeniería de Sistemas e Informática

Inteligencia Artificial

Profesor:

Mauricio Sanchez, David

Tema:

Ejercicios Resueltos en CLIPS

Ciclo:

2013-1

Page 2: 147750057 Ejercicios Clips

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Perú, Decana de América)

FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

2

1. Cree una plantilla de pacientes que tenga los siguientes campos y datos:

CAMPO TIPO DE DATO VALOR POR DEFECTO

SIMBOLO PERMITIDO

Nombre String

Apellidos Symbol

Edad Integer 30

Sexo Symbol V v M

Volumen Pulmonar Float 25

Estado Symbol baja Alta baja

Resolución:

Se usará el comando deftemplate para la creación 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), símbolos 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))

)

Page 3: 147750057 Ejercicios Clips

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Perú, Decana de América)

FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

3

2. Crear una función que sume 2 números.

(deffunction suma(?a ?b) (bind ?suma (+ ?a ?b)) (printout t "Suma =" ?suma crlf) (+ ?a ?b) ) Resolución:

Se creará una función (deffunction) llamada suma el cual reciba como parámetro dos números (?a ?b), estas variables serán sumadas, el valor de dicha suma será guardada en la variable local suma , para ser impresa haciendo uso del printout o la impresión inmediata de la suma sin hacer uso de ninguna variable (+ ?a ?b).

Page 4: 147750057 Ejercicios Clips

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Perú, Decana de América)

FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

4

3. Crear una función que halle la hipotenusa de un triángulo rectángulo ingresando sus

catetos.

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

Resolución:

Se utilizará una función (deffunction) llamada hipotenusa el cual reciba como parámetro dos números (?a ?b), estas variables serán multiplicada, para luego ser sumadas y por ultimo extraer su raíz cuadrada (sqrt).

4. Crear una función que muestre una secuencia de números anteriores al número

ingresado.

Resolución:

Se creará una función (deffunction) llamada iteraction el cual reciba como

parámetro a un número, para el desarrollo de la función se hará uso de una

variable local (i) inicializado con 0. Se utilizará el bucle (while) el cual verificará si

el parámetro es menor o igual a la variable local, caso contrario imprimirá el valor

de la variable continuando con el bucle.

Page 5: 147750057 Ejercicios Clips

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Perú, Decana de América)

FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

5

(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 función en donde te indique si un alumno esta aprobado o desaprobado,

además de ello enviar una observación.

Resolución:

Para este problema se usará la función deffunction cuyo nombre de la función será

calif_alumno, para la elaboración 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)

Page 6: 147750057 Ejercicios Clips

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Perú, Decana de América)

FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

6

) (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 número

Resolución:

Se utiliza la función 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)

Page 7: 147750057 Ejercicios Clips

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Perú, Decana de América)

FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

7

7. Realice todas las operaciones (suma, resta, multiplicación y división).Mediante la función

deffunction. Ejemplo ingrese los valores 8 y 4.

Resolución:

Para el desarrollo del problema se uso el comando deffunction cuyo nombre de la

función 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)

)

Page 8: 147750057 Ejercicios Clips

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Perú, Decana de América)

FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

8

8. Con el ejemplo anterior ingrese más pacientes mediante la función assert, y luego muestre

todos los pacientes ingresados.

Resolución:

Basándonos del ejemplo anterior y ya teniendo una plantilla de paciente,

ingresaremos mas paciente usando la función o comando assert y al final

mostraremos todos los pacientes, mediante el comando facts.

(deftemplate paciente

(slot nombre)

(slot apellido)

Page 9: 147750057 Ejercicios Clips

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Perú, Decana de América)

FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

9

(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. Además de ellos elimine

uno de ellos y modifique .Al final muestre todos los hechos dados con sus respectivos

cambios.

Page 10: 147750057 Ejercicios Clips

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Perú, Decana de América)

FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

10

Resolución:

Para la solución 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 algún 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)) <Fact-3> CLIPS> (facts) f-0 (initial-fact) f-3 (paciente (nombre "isabel") (apellido "lopez") (edad 20) (sintoma "fiebre")) For a total of 2 facts.

Page 11: 147750057 Ejercicios Clips

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Perú, Decana de América)

FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

11

10. Realice una función que calcule la factorial de un número ingresado.

Resolución:

Se implementará la función (deffunction) factorial el cual recibirá un parámetro, se

verificará si dicho valor es válido, 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

función pero con el parámetro 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))))))

Page 12: 147750057 Ejercicios Clips

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Perú, Decana de América)

FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

12

11. Implementar una función que suma los números naturales hasta el número ingresado usando recursividad

Resolución:

Se procederá a crear una función llamada sumaRecursiva donde se tendrá como parámetro el número límite de la suma. Se comenzará a verificar si el número que recibe como parámetro es 0, en el caso que lo sea, la variable local a tomará el valor de 0, caso contrario tomará el valor del parámetro prosiguiendo a llamar nuevamente a la función sumaRecursiva pero con el valor del parámetro disminuido en 1.

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

A continuación se muestra un propuesto para el control de laboratorio de CLIPS

del día: martes, 4 de junio del 2013.

Page 13: 147750057 Ejercicios Clips

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Perú, Decana de América)

FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

13

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 años

(ninno nombre edad): imprime nombre “es niño” si edad es de 5 a 12 años

(adolecente nombre edad): imprime nombre “es adolecente” si edad es de 13 a 18 años

(joven nombre edad): imprime nombre “es adolecente” si edad es de 19 a 33 años

(adulto nombre edad): imprime nombre “es adulto” si edad es de 34 a 65 años

(anciano nombre edad): imprime nombre “es anciano” si edad es mayor de 65 años

Luego defina una función era que llame a las anteriores. Ejemplo

Si

(era Juan 23)

Muestra:

Juan es joven

2.Defina una función iterativa o recursiva que implemente un dibujo de un rectángulo 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 (mamíferos, peces, reptiles, etc) y el nombre del animal.

B. Ingrese los siguientes hechos, a la lista de hechos.

Animales:

Peces: trucha, mono, tortuga.

Page 14: 147750057 Ejercicios Clips

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Perú, Decana de América)

FACULTAD DE INGENIERÍA DE SISTEMAS E INFORMÁTICA

14

Mamíferos: serpiente, ratón, paloma.

Reptiles: perro, cocodrilo, atún.

C. Modifique los hechos de tal forma que los animales se encuentren en la clasificación

que les corresponde. Elimine de la lista de hechos a los animales que no se encuentran

entre esas clasificaciones. Por último, liste los hechos después de las modificaciones.

Use los comandos adecuados (assert, modify, retract)