1
CLIPS v6.1 Resumen
Raquel Fuentetaja Pizn a [Link]@[Link] Susana Fernndez Arregui a [Link]@[Link]
Universidad Carlos III de Madrid Departamento de Informtica a [Link]
CLIPS v6.1 Resumen
1. 2. 3. 4. 5. Introduccin o Hechos Reglas Funciones Marcos
Introduccin o
Clips
CLIPS: C Language Integrated Production System Programado en C Comunicacin con otros lenguajes: C y Ada o Similitudes con LISP y C Desarrollado por Software Technology Branch (STB) NASA desde 1986 Combina elementos de los paradigmas de lenguajes declarativos, funcionales y orientados a objetos
Introduccin o
Intrprete de comandos e
$ clips $ clips -f nombrechero, nombrechero chero con comandos CLIPS Recomendacin: Utilizar emacs o xemacs, hacer dos buers en uno tener o el chero .clp y en el otro abrir un shell con clips Cuando aparece el prompt CLIP S > introducir comandos para evaluar Distingue entre maysculas y minsculas u u Clips tiene muchos comandos implementados: (load nombrechero), (reset), (run), (clear) . . .
Introduccin o
Expresiones
La sintaxis de las expresiones es preja Una expresin es una serie de campos delimitados por parntesis o e Ejemplo: (+ 1 (* 2 3)) En modo interactivo CLIPS evala las expresiones: u CLIP S > (+ 1 2 (* 3 4 )) 15 CLIP S > Algunas funciones y operadores matemticos disponibles: a + - / * mod div sqrt round integer
Introduccin o
Tipos de datos
NUMBER - INTEGER - FLOAT STRING. Ejemplo: Esto es un string - Para incluir comillas en una cadena hay que usar \ - Para incluir \ en una cadena hay que usar \\ SYMBOL. Ejemplo: luis, luis-gil, EXTERNAL-ADDRESS FACT-ADDRESS INSTANCE-NAME INSTANCE-ADDRESS
CLIPS v6.1 Resumen
1. 2. 3. 4. 5. Introduccin o Hechos Reglas Funciones Marcos
Hechos
Facts
Elementos bsicos de conocimiento a Pueden tener un campo o varios. El primer campo suele representar una relacin entre los restantes: o (hola) (alumnos Juan Pedro Luis) (edad 14) (color silla verde) Campos sin valor: nil. Ej. (color silla nil) Ordenados y no ordenados (plantillas o templates) A cada hecho CLIPS asigna automticamente un identicador unico a (fact-index). Por ejemplo f-10
Hechos
Comandos sobre hechos
(facts) : Para ver el contenido de la base de hechos (fact-list) (assert hecho) : Para aadir hechos a la base de hechos n (retract indice-hecho) : Para eliminar hechos de la base de hechos (reset) : Elimina todos los hechos de la memoria de trabajo, elimina las activaciones de la agenda y restaura las condiciones iniciales: - Aade initial-fact e initial-object n - Aade los hechos y ejemplares iniciales, denidos con deacts y n denstances - Aade las variables globales con su valor inicial n (clear) : Elimina todos los hechos y construcciones de la memoria de trabajo
Hechos
10
Hechos iniciales
deacts: Para denir los hechos iniciales Los hechos iniciales se aaden a la base al hacer (reset) n
- CLIP S > (deacts padres padres iniciales (padre-de Luis Antonio) (padre-de Luis Maria) (padre-de Antonio Juan)) - CLIP S > (reset) - CLIP S > (facts) f-0 (initial-fact) f-1 (padre-de Luis Antonio) f-2 (padre-de Luis Maria) f-3 (padre-de Antonio Juan)
Hechos
11
Plantillas o templates
Permiten asignar un nombre a cada campo. El orden de los slots no tiene importancia Se declaran con deftemplate (deftemplate <nombre-plantilla> [<comentario>] <descripcion-de-slot1> ... <descripcion-de-slotN>) Los slots se denen por un nombre y sus atributos (facetas). Por defecto CLIPS les asigna un valor.
(deftemplate robot (slot bandeja (type SYMBOL) (allowed-values LLENA VACIA) (default VACIA)) )
Pueden almacenar un unico valor slot o varios multislot
Hechos
12
Atributos o facetas
Los atributos de un slot pueden ser de dos tipos - De restriccin o type tipo : determina el tipo de datos del slot allowed-values valores: limita al conjunto de valores los que se pueden asignar range rango : limita los valores posibles al rango indicado - De valor default valor: valor por omisin al slot o Se puede forzar al usuario a que indique un valor (?NONE) Se puede indicar que sea CLIPS quien determine el valor por omisin o de un slot en funcin de las restricciones aplicadas siguiendo una o serie de reglas con el atributo ?DERIVE Adems de assert y retract se pueden modicar con modify a (modify direccion-hecho (nombre-atributo nuevo-valor)* )
Hechos
13
Ejemplo
(deftemplate chado (slot nombre (type STRING) (default ?NONE)) (slot edad (type INTEGER) (range 1 100) (default ?NONE)) (slot condicion (type SYMBOL) (allowed-values inocente sospechoso imputado condenado antecedentes) (default inocente)) (slot clase (type SYMBOL) (allowed-values media baja alta) (default ?DERIVE)) )
Hechos
14
Ejemplo
Insertar hechos diferentes de tipo chado:
(assert (chado (assert (chado (assert (chado (assert (chado FALSE (nombre (nombre (nombre (nombre Carlos) (edad 28) (condicion sospechoso))) Pepe) (edad 18) (clase alta))) Juan))) Juan)))
CLIPS>(facts)
f-0 (initial-fact) f-1 (chado (nombre Carlos) (edad 28) (condicion sospechoso) (clase media)) f-2 (chado (nombre Pepe) (edad 18) (condicion inocente) (clase alta)) f-3 (chado (nombre Juan) (edad 1) (condicion inocente) (clase media)) For a total of 4 facts
CLIPS>(assert (chado))
[TMPLTRHS1] Slot nombre requires a value because of its (default ?NONE) attribute.
15
CLIPS v6.1 Resumen
1. 2. 3. 4. 5. Introduccin o Hechos Reglas Funciones Marcos
Reglas
16
Sintaxis
(defrule <nombre-regla> [<documentacion-opcional>] [(declare (salience <numero>))] <premisa-o-elemento-de-condicion>* <accion>* Ejemplo: (defrule ascendencia detecta los antepasados obvios (padre-de Luis Pedro) (assert (antepasado-de Luis Pedro))) Si no hay elementos de condicin se usa initial-fact: o (defrule regla-inicial (assert (antepasado-de Luis Pedro)))
Reglas
17
Variables
El uso de variables ?<nombre-variable>, ?$<nombre-variable> hace las reglas ms generales a (defrule ascendencia detecta los antepasados obvios (declare (salience 2)) (padre-de ?x ?y) (assert (antepasado-de ?x ?y)) ) (defrule genera-escenas (declare (salience 20)) (lista $?l) (assert (un-hecho-de-la-lista (nth$ 1 $?l))) )
Reglas
18
Elementos de condicin (LHS) o
Patrones: Consulta a la fact-list preguntando por la existencia de hechos determinados
(dato 1 azul rojo) (persona (nombre ?N) (amigos $?A) (edad 30))
Direcciones de hechos: Almacenar direcciones de hechos en variables
?P(persona (nombre ?N) (amigos $?A) (edad 30))
Test: Comprobar el cumplimiento de alguna condicin o
(test (>= (abs (- ?y ?x)) 3))
Not: Preguntar por la NO existencia de determinados hechos en la fact-list
(not (dato rojo ?x ?x))
Reglas
19
Acciones o efectos (RHS)
assert: Para incorporar un hecho en la fact-list
(assert dato 1 azul rojo))
retract: Para eliminar un hecho de la fact-list
(defrule eliminar-estado-valvula ?f1 (estado (valvula ?X)) (retract ?f1) )
modify: Para modicar un hecho de la fact-list. Equivalente a hacer un retract y un assert. Slo para plantillas o
(defrule cambiar-estado-valvula ?f1 (estado (valvula abierta)) (modify ?f1 (valvula cerrada)))
Reglas
20
Acciones
Parada: Para parar la ejecucin del sistema: (halt) o bind: Asignacin de valor a variables (bind ?X (* ?Y 2)) o Funciones de entrada/salida: open, close, printout, read, readline Otras funciones
Reglas
21
Comandos para reglas
Al denir reglas ya existentes, la primera regla se borra (list-defrules): Para ver las reglas denidas (ppdefrule <nombre-de-regla>): Para ver la denicin de una regla o (undefrule <nombre-de-regla>): Para eliminar una regla (undefrule *): Para eliminar todas las reglas
Reglas
22
Ejecucin de reglas o
Las activaciones de reglas se mantienen en la agenda La colocacin de una regla en la agenda se realiza segn su prioridad y o u la estrategia de resolucin de conictos denida o (agenda): Para ver el contenido de la agenda (run): Para ejecutar las reglas seguidas (run <veces>): Para ejecutar <veces> reglas (matches <nombre-regla>): Para ver que hechos se equiparan con los patrones de una regla
Reglas
23
Depuracin de programas o
(watch <item>) : Observacin de la evolucin de los componentes del o o sistema all compilations statistic messages deunctions rules facts activations (unwatch <item>): Para desactivar el modo de observacin o (dribble-on/o <nombre-chero>): Para grabar en un chero la evolucin del dilogo usuario-CLIPS o a set-break y remove-break: Para poner y quitar un breakpoint en la regla que se les pasa como argumento (run <numero-de-reglas-a-disparar>): Ejecutar paso a paso (matches <nombre-regla>): Para ver que hechos se equiparan con los patrones de una regla
Reglas
24
Estrategias de resolucin de conictos o
Se seleccionan con el comando: (set-strategy <estrategia>) depth: (Profundidad). Las nuevas activaciones se sitan por encima de u las de igual prioridad. Es la estrategia por omisin o breadth: (Amplitud). Las nuevas activaciones se sitan por debajo de u las de igual prioridad simplicity: Las nuevas activaciones se sitan por encima de las u activaciones con igual o mayor especicidad complexity: Las nuevas activaciones se sitan por encima de las u activaciones con igual o menor especicidad random: Aleatoria. A cada activacin se le asigna un nmero aleatorio o u para determinar su orden en la agenda.
25
CLIPS v6.1 Resumen
1. 2. 3. 4. 5. Introduccin o Hechos Reglas Funciones Marcos
Funciones
26
Funciones de Entrada/Salida
Abrir un chero: open (open nombre-chero nombre-canal-asignado modo-acceso) Cerrar un chero: close (close nombre-canal) Modos de acceso: r slo lectura o w slo escritura o r+ lectura y escritura a escritura al nal de chero (append) Canales predenidos: stdin, stdount, werror Leer de un canal: read. Devuelve el primer s mbolo que encuentre (read <nombre-canal>)
Funciones
27
Escritura
Por pantalla: (printout t texto literal ?v1 ms texto ?v2 crlf) a En chero:
(defglobal ?*le* = ) (defrule estado-inicial (declare (salience 3000)) (unwatch all) (set-strategy random) (open [Link] ?*le* a) (printout ?*le* EMPIEZA EL CUENTO crlf))
Funciones
28
Funciones de comparacin y lgicas o o
Las siguientes funciones comparan sus argumentos y devuelven un valor lgico TRUE o FALSE o eq TRUE si los valores de las expresiones argumento son iguales en valor y tipo neq TRUE si alguno de los valores de las expresiones argumento es distinto Las funciones =, <>, <, >, <=, >= presuponen argumentos numricos e Las funciones lgicas usan argumentos lgicos y devuelven un valor o o lgico o and TRUE si todos los valores de las expresiones argumento son TRUE or TRUE si alguno de los valores de las expresiones argumento es TRUE not TRUE si el valor de la expresin argumento es TRUE o
29
CLIPS v6.1 Resumen
1. 2. 3. 4. 5. Introduccin o Hechos Reglas Funciones Marcos
Marcos
30
Denicin o
Se declaran con defclass: (defclass <nombre-plantilla> (is-a <clase-padre>) <propiedades de la clase> <descripcion-de-slot1> ... <descripcion-de-slotN>) Slot igual que en las plantillas. Algunos atributos propios (create-accesor read-write). Para poder modicarlo (source composite). Hereda todas las facetas del mismo slot que el padre. Redenir slots Propiedades de la clase: (role abstract/concrete), (pattern-match non-reactive/reactive) CLIPS tiene 17 clases denidas. Todas abstractas (no se pueden crear instancias directas) menos INITIAL-OBJECT
Marcos
31
Ejemplo1
;; Denicion de la clases SECUENCIA (defclass SECUENCIA (is-a INITIAL-OBJECT) (slot id (type INTEGER) (create-accessor read-write)) (slot gliterario (type SYMBOL) (default CUENTO) (create-accessor read-write)) (multislot lista (type SYMBOL) (create-accessor read-write))) (denstances secuencias ([sec1] of SECUENCIA (id 1) (gliterario cuento) (lista INTRODUCCION PROBLEMA MANDATO ALEJAMIENTO)))
Marcos
Ejemplo2
;; Denicin de la clase abstracta (no se pueden generar instancias de ella) ESCENA o (defclass ESCENA (is-a INITIAL-OBJECT) (role abstract) (pattern-match non-reactive) (slot orden (create-accessor read-write) (range 1 10) (type INTEGER))) ;; Denicin de las claeses hijas de ESCENA o (defclass INTRODUCCION (is-a ESCENA) (role concrete) (pattern-match reactive) (slot primitiva (create-accessor read-write) (type SYMBOL)) (slot orden (source-composite) (default 8)))
32
Marcos
33
Comandos
make-instance: aade una instancia a la base de hechos n (make-instance of INTRODUCCION (primitiva ESTAR)) unmake-instance: quita la instancia de la base de hechos (unmake-instance ?ins) modify-instance: borra y crea instancias de la base de hechos (modify-instance ?ins (orden 7)) instances: muestra las instancias de la base de hechos [gen1] of INTRODUCCION (send [gen1] print): para ver valor de los slots
Marcos
34
Reglas
(defrule genera-escenas ?control (control (paso 1) (secuencia ?id) (total-escenas ?tot&0) (escena ?es&:(<= ?es ?tot))) ?secuencia (object (is-a SECUENCIA) (lista $?lista) (id ?id)) (bind ?clase (nth$ ?es $?lista)) (printout t Escena ?es lase, ?clase crlf) c (make-instance of ?clase (orden ?es)) (modify-instance ?secuencia (id 0)) (unmake-instance ?secuencia) (modify ?control (escena (+ 1 ?es))))