Beruflich Dokumente
Kultur Dokumente
Definir una funcin que asigne a los das de la semana los nmeros 1,2,3,4,5,6,7
respectivamente
(deffunction
semana(?n)
(if(= ?n 1)then
(printout t "lunes" crlf)
)
(if(= ?n 2)then
(printout t "martes" crlf)
)
(if(= ?n 3)then
(printout t "miercoles" crlf)
)
(if(= ?n 4)then
(printout t "jueves" crlf)
)
(if(= ?n 5)then
(printout t "viernes" crlf)
)
(if(= ?n 6)then
(printout t "sabado" crlf)
)
(if(= ?n 7)then
(printout t "domingo" crlf)
)
)
3. Leda una fecha ,decir el da de la semana, suponiendo que el dia 1 de dicho
mes fue lunes
(deffunction dia(?n)
(bind ?resto (mod ?n 7))
(switch ?resto
(case 1 then
(printout t "lunes" crlf)
)
(case 2 then
(printout t "martes" crlf)
)
(case 3 then
(printout t "miercoles" crlf)
)
(case 4 then
(printout t "jueves" crlf)
)
(case 5 then
(printout t "viernes" crlf)
)
(case 6 then
(printout t "sabado" crlf)
)
(case 7 then
(printout t "domingo" crlf)
)
(default domingo)
)
)
4. Define una plantilla denominada curso que represente una relacin de cursos
con los siguientes campos simples: nombre del curso, cdigo del curso, numero
de crditos, nombre del profesor e ingresar 1 hecho en la memoria de trabajo
(deftemplate curso
(slot nombre)
(slot codigo)
(slot num_creditos)
(slot nombre_profesor)
)
(assert (curso
(nombre inteligencia)
(codigo 001)
(num_creditos 4)
(nombre_profesor mauricio)
))
5. Mostrar los hechos almacenados en memoria de trabajo con los siguientes
parmetros
Mostrar todos los hechos
Mostrar primer hecho almacenado
(while(!= ?n 0)
(bind ?r (mod ?n 10))
(bind ?s (+ ?s ?r))
(bind ?s (/ ?n 10))
)
return ?s
)
11. Define una plantilla denominada profesor que represente una relacin de
profesores
con los siguientes campos simples:
nombre del profesor, cdigo del profesor, dni, asigmnatura e ingresar 1 hecho en la
memoria de hecho
(deftemplate profesor
(slot nombre)
(slot codigo)
(slot dni)
(slot asignatura)
)
(assert (profesor
(nombre mauricio)
(dni 44158963)
(asignatura inteligencia artificial)
))
12. leer dos numeros y ver en panltalla si estan en orden creciente o decreciente
(deffunction orden(?a ?b)
(if(< ?a ?b)then
(printout t "orden creciente")
else
(printout t "orden creciente")
)
)
13. Dado una lista de nmeros encuentra el mayo de ellos, para ello Ud. Debe
implementar una regla en CLIPS ms no una funcin.
Solucin:
(defrule maximo
(vector $? ?x $?)
(not (vector $? ?y&:(> ?y ?x) $?))
=>
(printout t "El maximo es " ?x crlf))
14. En una caja existen diferentes tipos de objetos con un color especfico tales como
esferas (azul), cubos (rojo), pirmides (verde) y cilindros (blanco). Escribe una serie
de reglas de manera que en base a un hecho que indique el color del objeto
identifique que clase de objeto es. Por ejemplo, si se afirma un hecho como
(color rojo). Al ejecutar el programa debera imprimirse por pantalla un
mensaje como Se trata de un cubo.
Solucin:
Para el desarrollo de este ejercicio, hemos creado un
deffacts con hechos de objetos, es decir el hecho
(objeto cubo rojo), significa que ese tipo objeto es
de ese color, para ver luego a que tipo de objeto
estamos buscando introducimos un hecho como (color
rojo) y nos muestra el tipo de objeto que es.
(deffacts Introducir_objetos "Introduccion de objetos y colores"
(objeto cubo rojo)
(objeto esfera azul)
(objeto pirmide verde)
(objeto cilindro blanco)
)
(defrule colores
(color ?x)
(objeto ?objeto ?x)
=>
(printout t "Se trata de un " ?objeto crlf)
)
15. Teniendo el siguiente razonamiento lgico, construya en CLIPS los hechos y reglas
que sean necesarias para llegar a la conclusin de que Carmen es peruana y Carmen
es americana.
Carmen es una persona
Carmen vive en Lima
Toda persona que vive en Lima es peruana
Toda persona que vive en Per es Americana
Solucin.
;hechos
(assert (persona carmen))
(assert (limena carmen))
;reglas
(defrule peruana
(persona ?x)
(limena ?x)
=>
(assert (peruana ?x))
(printout t ?x "es peruana" crlf))
(defrule americana
(persona ?x)
(peruana ?x)
=>
(assert (americana ?x))
(printout t ?x "es americana" crlf))
16. Dada una lista de nmeros obtener la lista ordenada de menor a mayor. Para ello
debes usar reglas no funciones.
Solucin:
(assert (vector 3 2 1 4))
(defrule inicial
(vector $?x)
=>
(assert (vector-aux ?x))
)
(defrule ordena
?f <- (vector-aux $?b ?m1 ?m2&:(< ?m2 ?m1) $?e)
=>
(retract ?f)
(assert (vector-aux $?b ?m2 ?m1 $?e))
)
(defrule final
(not (vector-aux $?b ?m1 ?m2&:(< ?m2 ?m1) $?e))
(vector $?x)
(vector-aux $?y)
=>
(printout t "La ordenacion de " ?x " es " ?y crlf)
)
17. Si se dispone de una serie de hechos que almacenan informacin acerca del nombre
de personas y el da de su cumpleaos, escribe una regla que dado un hecho como
(comprobar-cumple (dia 21-7)) muestre por pantalla el nombre de las personas
que cumplen aos ese da.
Solucin:
Construimos la plantilla personas, con los slots nombre y dia.
(deftemplate personas
(slot nombre)
(slot dia)
)
plantilla
18. Se tiene dos conjuntos A={a, b} y B={b, c}, defina las reglas necesarias en CLIPS,
para obtener la unin de dichos conjuntos C={a, b, c}.
Solucin:
Para obtener la unin necesitamos definir primero los hechos sobre las que
tienen que operar las reglas.
Definicin de hechos
(deffacts conjuntos
(A a b)
(B b c)
)
19. Escribe un programa para ayudar a una persona a decidir qu plantas podra plantar.
La siguiente tabla indica las caractersticas de una serie de plantas (tolerancia al fro,
tolerancia a la sombra, tolerancia al clima seco, tolerancia al suelo hmedo,
tolerancia al suelo cido, si puede vivir en la ciudad, si puede vivir en una maceta, si
es fcil de cuidar y si es de crecimiento rpido). La entrada al programa debe
consistir en un conjunto de hechos del tipo (caracteristica-deseada <caracterstica>)
que indiquen caractersticas que se desee que tenga una planta. El programa debe
mostrar por pantalla el nombre de las plantas que cuenten exactamente con las
caractersticas indicadas, ni ms ni menos.
Solucin:
Construimos la plantilla plantas, la cual est formada por el slot nombre y el
multislot tolerancia.
(deftemplate plantas
(slot nombre (type STRING))
(multislot tolerancia (type SYMBOL))
)
Indica que una planta puede plantarse si cumple las caracteristicas deseadas que
se hallan afirmado
(deftemplate puede-plantarse
(slot planta)
)
plantas
en
la
plantilla
20. Haz un programa que calcule el factorial de un nmero, de manera que ante un
hecho como (factorial 3) muestre por pantalla el siguiente mensaje.
El factorial de 3 es 6, usando reglas.
Solucin:
Construimos un deffacts para introducir un hecho relativo a factorial, para
realizar el factorial de un nmero, tenemos que introducir 3 hechos, el hecho
factorial con el nmero, un hecho para ir almacenado el resultado y un hecho
numero para saber luego cual es el nmero que hemos factorizado, ya que en
este ejercicio sigo la estrategia de ir disminuyendo factorial en uno, y sigo
realizando factorial hasta que sea 0, con lo cual no s al final que nmero he
factorizado.
(deffacts Introducir_factorial
(factorial 5)
(resultado 1)
(numero 5)
)