Vous êtes sur la page 1sur 5

Tutorial de CLIPS (i)

Trabajando con CLIPS


Para arrancar CLIPS desde una shell de Linux teclea clips; en Windows or MacOS, haz doble click en el icono de CLIPS. En ese momento aparecer el prompt CLIPS>. La forma ms usual de interactuar con CLIPS es a travs de un interprete de comandos, con una notacin muy similar a la del lenguaje LISP. As por ejemplo, para salir de CLIPS basta con teclar (exit). Aqu tienes algunos comandos bsicos (siempre encerrados entre parntesis):
(exit) (clear) (reset) (run)

Sale de CLIPS Elimina datos y programas de la memoria, tal como si salisemos y entrsemos en CLIPS. Elimina la informacin dinmica de la memoria y resetea la agenda. Comienza la ejecucin de un programa CLIPS.

Estos comandos pueden ser ejecutados tambin desde la barra de mens, en caso que estemos ejecutando CLIPS en un entorno grfico.

Hechos y Reglas
En un su modo ms sencillo, CLIPS opera manteniendo una lista de hechos ( facts) y un conjunto de reglas ( rules) con las que operar. Un hecho es una pieza de informacin tal como (colour green) o (parent_of John Susan). Los hechos se crean aseverando su existencia mediante el comando assert command. Un ejemplo, junto con la respuesta de CLIPS:
CLIPS>(assert (colour green)) <Fact-0>

El texto <Fact-0> is la respuesta de CLIPS e indica que se ha creado un nuevo hecho (fact number 0) y ha sido aadido a la Memoria de Trabajo (MT). El comando (facts) listar todos los hechos actuales almacenados en la MT:
CLIPS>(facts) f-0 (colour green) For a total of 1 fact.

Los hechos pueden ser retractados (eliminados) de la MT mediante el comando retract. Veamos un ejemplo:
CLIPS>(assert (colour green)) <Fact-0> CLIPS>(assert (colour red)) <Fact-1>

Para retraerse del primer hecho es necesario conocer el ndice de ese hecho, que es adjudicado por CLIPS, como se vio anteriormente:
CLIPS>(retract 0) CLIPS>(facts) f-1 (colour red) For a total of 1 fact.

Estos ndices no se reutilizan, esto es despues de borrar el hecho 0, ste no se le asignar a ningn hecho venidero. Los hechos por s mismo tienen una utilidad limitada. La aplicacin de reglas es necesaria para desarrollar un programa capaz de realizar alguna funcin til. En general, una regla es expresado en la forma SI <precondicin> ENTONCES<postcondicin>.Esta clase de regla es conocida como produccin, y de ah que a CLIPS y sistemas similares se les llame sistemas de produccin. En CLIPS, una regla tpica tiene el siguiente aspecto:
(defrule pato (animal-es pato) => (assert (sonido-es quack)))

Cada regla tiene tres partes. La primera parte, (defrule pato , simplemente le da un nombre nico a esa regla. La segunda parte, (animal-es pato), es elpatrn o LSH (el "SI...", left-hand side) de la regla, y la ltima parte, (assert (sonido-es quack)), es la accin o RHS (el "ENTONCES...", right-hand side). La regla del ejemplo puede parafrasearse como: "si hay un hecho (animal-es pato) en la MT, entonces asevera otro hecho, (sonido-es quack), en la MT". Prubalo. Limpia el sitema y teclea la regla tal cual. Tecleando (rules) te dar la lista de reglas presente en la Memoria de Produccin (una tan solo en este ejemplo). En este momento no hay hecho alguno, as que vamos a introducir uno, teclea (assert (animal-es pato)). Si compruebas el contenido de la MT vers que slo hay un hecho. Para lanzar la regla, teclea (run). Aparentemente no ocurre nada, pero si vuelves a comprobar el contenido de la MT, aparecer un nuevo hecho, (sonido-es quack), que ha sido inferido/producido por la regla. Esta es la fuerza de la programacin basada en reglas: la habilidad de hacer inferencias a partir de los datos, siendo posible usar el conocimiento inferido para lanzar nuevas relgas. Aade una segunda regla:
(defrule es-esto-un-pato (animal-tiene pies-palmeados) (animal-tiene plumas) => (assert (animal-es pato)))

Dado que esta regla tiene dos patrones, ambos deben satisfacerse para ser ejecutada la accin asociada. Comprueba qu pasa en la MT si aseveramos los dos hechos que aparecen en el patrn de la regla. Si aades tales hechos, (animal-tiene pies-palmeados), (animal-tiene plumas)y luego ejecutas el programa ( (run) ), vers que aparecen cuatro reglas en la MT. En primer lugar, la regla es-esto-un-pato se lanza, aseverando el hecho (animal-es pato). Este hecho entonces lanza a su vez la regla pato, con lo que se asevera el hecho (sonido-es

quack).

Sistemas muy poderosos pueden crearse mediante la adecuada construccin de reglas encadenadas entre ellas. Combinacin de elementos condicionales con And, Or, y Not Para que una regla este activada todos los elementos condicionales de la precondicin deben reconocer hechos de la memoria de trabajo. Por lo tanto, hasta ahora todas la reglas vistas tienen un and implcito entre los elementos condicionales. CLIPS ofrece la posibilidad de representar and y or explcitos, as como la posibilidad de indicar mediante not que una regla ser activada si no existe ningn hecho reconocido por un patrn. La siguiente regla se activa en el caso de que no exista el hecho (animal-es pato): (defrule nopato (not (animal-es pato)) => (assert (sonido-es noquack)) (printout t "Esto no es un pato" crlf)) NOTA IMPORTANTE: Para que not sea efectivo siempre, es necesario haber ejecutado en algn momento el reset. Tecleando (reset), entre otras cosas, se vaca la MT (las reglas estn en la memoria de produccin, no se toca) y se asevera el hecho (initial-fact). Este hecho es el que se le presupone a las reglas cuyo patrn est vaco. y se mantiene en la MT hasta que se ejecute (clear) o se salga y entre de clips. En ocasiones, tal como el ejemplo anterior, el uso de not conlleva que a esa regla se le aade el hecho (initial-fact) a su patrn, y es por ello que es necesario que en algn momento se haya invocado (reset) para que este tipo de reglas funcione correctamente. Es posible que la produccin de la regla est formada por tantas acciones como sea necesario. Por ejemplo podramos modificar la regla pato para que adems de aseverar un hecho, muestre por pantalla el hallazgo:
(defrule pato (animal-es pato) => (assert (sonido-es quack)) (printout t "Esto es un pato" crlf))

La siguiente vez que se teclee (run), si se asever previamente el hecho (animal-es pato), aparecer un mensaje aseverando que hay un pato. Algunos sencillos consejos de estilo para la creacin de reglas: - Evitar el uso de OR. Un patrn que contiene un OR puede fcilmente sustiturse por dos reglas con cada uno de los operandos que recibe el operador OR como patrn, y como accin, la misma accin de la regla original. - El "else" usual en las construcciones if...then puede simularse fcilmente creando una regla cuyo patrn sea la negacin del patrn de la regla original.

- Nunca invocar a una regla desde la accin de otra regla, ni usar reglas anidadas. En vez de ello, se debe descomponer la regla en diversas reglas ms sencillas que queden encadenadas mediante hechos intermedios. Ya que esos hechos intermedios o sealadores no tiene ms funcin que simplificar las reglas, deberan ser eliminados justo en la accin de aquellas reglas que le tienen como patrn.

Almacenamiento de reglas
Por convenio, los programas CLIPS tienen la extensin .CLP, si bien en estos archivos slo se almacenan constructores (por el momento el nico constructor que conocemos es defrule). Es posible cargar uno de tales archivos mediante (load "nombre-archivo.clp"). Tambin podemos siempre que queramos almacenar los constructores creados hasta ese momento mediante (save "nombre-archivo.clp"). Por el momento, los hechos deben ser tecleados en cada sesin.

Utilidades CLIPS
Las siguientes instrucciones te sern de utilidad:

(dribble-on <nombre-fichero>), (dribble-off) . Equivalente a la funcin dribble de lisp. dribble-on registra las salidas del terminal y las entradas del teclado en el fichero especificado. dribble-off cierra el fichero. (agenda) Muestra las reglas instanciadas. Para cada instancia muestra la prioridad de la regla, el nombre de la regla y los hechos reconocidos por la regla. (facts) Muestra los hechos de la memoria de trabajo. (watch <parmetro>) Es til para depurar programas. El parmetro puede ser un de los siguientes smbolos: facts, rules, activations, statistics, compilations, focus, o all. Para la prctica te interesar utilizar (watch facts) y (watch rules), que indica con la secuencia <== cuando se elimina un hecho, y con la secuencia ==>, cuando se inserta. Para que deje de dar esta informacin utiliza (unwatch facts).
o

CLIPS> (assert (animal-es pato)) ==> f-0 (animal-es pato) <Fact-0> CLIPS> (run) FIRE 1 pato: f-0 ==> f-1 (sonido-es quack) Esto es un pato

(matches <nombre-de-regla>) . Matches recibe como argumento el nombre de una regla y muestra los hechos reconocidos por cada patrn. Por ejemplo:

CLIPS>(matches Estado-Inicial) Matches for Pattern 1 f-0 Activations f-0 Cualquier lnea que comience con un punto y coma (;) no se interpreta. Son comentarios.