Você está na página 1de 34

1

CLIPS v6.1 Resumen


Raquel Fuentetaja Pizn a raquel.fuentetaja@uc3m.es Susana Fernndez Arregui a susana.fernandez@uc3m.es

Universidad Carlos III de Madrid Departamento de Informtica a http://galahad.plg.inf.uc3m.es/docweb/

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 cuento.txt ?*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))))

Você também pode gostar