Вы находитесь на странице: 1из 3

EJERCICIOS

1. Haga una Regla que permita aumentar en 8, a una variable global X,


cada vez que sea ejecutada.

(defglobal ?*x* = 5)

(defrule moficar-variables

(sumar variable)

=>

(bind ?*x* (+ ?*x* 8))

(printout t "X aumento su valor en 8" crlf)
)

(assert (sumar variable))

(run)
2. Escribir un motor de bsqueda de libros para una biblioteca, donde los
libros tengan solamente como informacin los ttulos, por ejemplo
(C++ tutorial), recuerda que los ttulos son guardados como hechos.




(deffacts books "titles of books"
(title CLIPS user guide)
(title Introduction to CLIPS)
(title C++ tutorial)
(title Assembler)
(title CLIPS manual))




Ahora escriba una regla que retorne todos los libros con la palabra CLIPS en
el ttulo.
(defrule find-clips-books
(title $?begin CLIPS $?end)
=>
(printout t "Clips book is " ?begin " CLIPS " ?end crlf))



3. Un estudiante de arte desea pintar su habitacin: El piso, las paredes, y
el marco de la ventana para ello se dirige a la tienda de pinturas donde
slo disponen de los siguientes colores: rojo, azul, verde, amarillo,
violeta, marrn, negro y blanco; el estudiante le indica al encargado el
siguiente:
Para el piso quiero el color azul o marrn, para las paredes cualquier
color menos blanco, violeta y rojo y finalmente para el marco de mi
ventana cualquiera menos negro, blanco o verde; se pide hacer uso de
las reglas y el uso de restricciones conectivas para generar las posibles
combinaciones y/o colores que puede elegir y satisfacer los
requerimientos del estudiante
Solucin:
(deftemplate pintar (slot value))
(deffacts P
(pintar (value rojo))
(pintar (value azul))
(pintar (value verde))
(pintar (value amarillo))
(pintar (value violeta))
(pintar (value marron))
(pintar (value negro))
(pintar (value blanco)))
(defrule colorpared
(pintar (value ?x&~rojo&~blanco&~violeta))
=>
(printout t "pintar la pared con el color: = " ?x crlf))
(defrule colorpiso
(pintar (value ?x&azul|marron))
=>
(printout t "pintar el piso con el color: = " ?x crlf))

(defrule colorventana
(pintar (value ?x&~negro&~blanco&~verde))
=>
(printout t "pintar la ventana con el color: = " ?x crlf))
















4. Crear una regla que llame a una funcin que lea un numero de teclado,
y llame a un mtodo en el cual una vez ingresado el nmero ledo te
retorne la letra del abecedario correspondiente a ese nmero, no
considerar las silabas LL y y no ostrar nada si la posicin esta mayor
a 26 o menor que 0
Ejemplo: Si se ingresase 4, debera resultar La letra del abecedario en
la posicin 4 es d
Solucin:
(defmethod abc(?pos)
(bind ?sal(nth$ ?pos (create$ a b c d e f g h i j k l m n o p q r s t u v w x y
z)))
(printout t "La letra del abecedario en la posicion " ?pos " es: " ?sal crlf)
)
(defrule leer-pos
(leer pos)
=>
(printout t "ingrese la posicin de la letra a buscar:")
(bind ?x (read))
(assert (posicion ?x))
)
(defrule hallar-pos
(posicion ?x)
=>
(if (and (> ?x 0) (< ?x 27))then
(abc ?x)
))

Похожие интересы