Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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)) )
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
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
Reglas
19
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
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
25
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
29
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))))