Está en la página 1de 14

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

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


Universidad del Per, Decana de Amrica)

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA


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

TIPO DE DATO

Nombre
Apellidos
Edad
Sexo
Volumen Pulmonar
Estado

String
Symbol
Integer
Symbol
Float
Symbol

VALOR POR
DEFECTO

SIMBOLO
PERMITIDO

30
VvM
25
baja

Alta 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))
)

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


Universidad del Per, Decana de Amrica)

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA

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).

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


Universidad del Per, Decana de Amrica)

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA

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.

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


Universidad del Per, Decana de Amrica)

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA


(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)
5

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


Universidad del Per, Decana de Amrica)

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA


)
(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)

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


Universidad del Per, Decana de Amrica)

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA

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)
)

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


Universidad del Per, Decana de Amrica)

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA

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)
8

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


Universidad del Per, Decana de Amrica)

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA


(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.

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


Universidad del Per, Decana de Amrica)

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA

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))
<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.

10

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


Universidad del Per, Decana de Amrica)

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA

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

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


Universidad del Per, Decana de Amrica)

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA


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.

12

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


Universidad del Per, Decana de Amrica)

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA

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 aos
Luego defina una funcin era que llame a las anteriores. Ejemplo
Si
(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.
13

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


Universidad del Per, Decana de Amrica)

FACULTAD DE INGENIERA DE SISTEMAS E INFORMTICA


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)

14

También podría gustarte