Você está na página 1de 41

INTRODUCCIÓN AL

CLIPS
C LANGUAGE INTEGRATED PRODUCTION SYSTEM
UCC. 2016
INGENIERÍA DEL CONOCIMIENTO
RECURSOS DE CLIPS

• HTTP://CLIPSRULES.SOURCEFORGE.NET/
• HERRAMIENTA PARA SBC DESARROLLADA POR LA
SECCIÓN DE TECNOLOGÍA DE SOFTWARE (SOFTWARE
TECHNOLOGY BRANCH) DE LA NASA.

• EN DESARROLLO DESDE 1985

• PORTABLE: SE PUEDE PORTAR A CUALQUIER SISTEMA


CON COMPILADOR ANSI C O C++. EXISTE EN
WINDOWS 95/98/NT, MACOS X, Y UNIX. SE TIENE
ACCESO AL CÓDIGO FUENTE PARA ADAPTARLO A
NECESIDADES.

• INTEGRABLE: SE PUEDE INTEGRAR CON CÓDIGO DE


OTROS LENGUAJES (C, JAVA, FORTRAN, ADA) Y
CLIPS SOPORTA:

• PROGRAMACIÓN DECLARATIVA: REGLAS (CON


ENCADENAMIENTO HACIA ADELANTE)

• PROGRAMACIÓN PROCEDIMENTAL

• PROGRAMACIÓN ORIENTADA A OBJETOS


Motor de Inferencia Memoria
Base de
de Trabajo
Conocimientos
(Hechos)
(Reglas) Agenda

Interfaz
HECHOS
• LOS HECHOS (“FACTS”) EN CLIPS CONSTAN
DE
• UN NOMBRE DEL HECHO (EJ: RELACIÓN)
• UNA O MÁS RANURAS (“SLOTS”)
• ANTES DE CREAR HECHOS, PARA CADA TIPO
DE HECHO PUEDE DEFINIRSE UNA PLANTILLA
CON LA LISTA DE RANURAS VÁLIDAS PARA
ESE TIPO DE HECHO.
EJEMPLO: DECLARACIÓN DE UNA PLANTILLA PARA HECOS QUE
DESCRIBIRÁN UNA PERSONA:

(deftemplate persona “es una persona”


(slot nombre)
(slot edad)
(slot estatura)
(slot color-de-cabello))
AGREGANDO UN HECHO A LA LISTA DE HECHOS CON EL
COMANDO ASSERT:

(assert (persona
(nombre “Juan Mora")
(edad 35)
(estatura 168)
(color-de-cabello negro)))
<Fact-0>
AGREGANDO OTRO HECHO A LA LISTA DE HECHOS:

(assert (persona
(nombre “Pedro Pombo")
(edad 46)
(estatura 172)
(color-de-cabello negro)))
<Fact-1>
VER LISTA DE LOS HECHOS:

(facts)
f-0 (persona (nombre "Juan Mora")
(edad 35) (estatura 168)
(color-de-cabello negro))
f-1 (persona (nombre "Pedro
Pombo") (edad 46) (estatura
172) (color-de-cabello
negro))
For a total of 2 facts.
MODIFICAR RANURA DE UN HECHO:

(modify 0 (edad 37))


<Fact-2>
(facts)
f-1 (persona (nombre "Pedro
Pombo") (edad 46) (estatura
172) (color-de-cabello
negro))
f-2 (persona (nombre "Juan Mora")
(edad 37) (estatura 168)
(color-de-cabello negro))
For a total of 2 facts.
CREAR UN HECHO CON BASE EN OTRO:

(duplicate 1 (nombre “Lina Mira”))


<Fact-3>
(facts)
f-1 (persona (nombre "Pedro
Pombo") (edad 46) (estatura
172) (color-de-cabello
negro))
f-2 (persona (nombre "Juan Mora")
(edad 37) (estatura 168)
(color-de-cabello negro))
f-3 (persona (nombre "Lina Mira")
(edad 46) (estatura 172)
(color-de-cabello negro))
For a total of 3 facts.
(retract 1)
(facts)

f-2 (persona (nombre "Juan Mora")


(edad 37) (estatura 168)
(color-de-cabello negro))
f-3 (persona (nombre "Lina Mira")
(edad 46) (estatura 172)
(color-de-cabello negro))
For a total of 2 facts.
SE PUEDEN ELIMINAR VARIOS HECHOS CON UN SOLO
RETRACT:

(retract 0 2 5)

Se pueden eliminar todos los hechos:

(retract * )
SE PUEDEN DEFINIR RANURAS MULTICAMPO, QUE ADMITEN
VARIOS VALORES:

(deftemplate individuo “ejemplo multislot”


(multislot nombre)
(slot edad)
(slot estatura)
(slot color-de-cabello))
ASÍ PUEDEN EXISTIR HECHOS COMO:

(individuo
(nombre Juan Mora Duarte)
(edad 35)
(estatura 168)
(color-de-cabello negro)))
SE PUEDEN DECLARAR VARIOS HECHOS COMO CONOCIMIENTO
INICIAL CON DEFFACTS:

(deffacts gente “algunas personas”


(persona (nombre "Marta Paez") (edad 33)
(estatura 170) (color-de-cabello rubio))
(persona (nombre "Diego Molina") (edad 25)
(estatura 168) (color-de-cabello negro))
(persona (nombre "Luz Perez Daza") (edad 19)
(estatura 166) (color-de-cabello negro)) )
(facts)

f-2 (persona (nombre "Juan Mora")


(edad 37) (estatura 168)
(color-de-cabello negro))
f-3 (persona (nombre "Lina Mira")
(edad 46) (estatura 172)
(color-de-cabello negro))
For a total of 2 facts.
LOS HECHOS CONTENIDOS EN DEFFACTS SE
ASEVERAN A LA LISTA DE HECHOS CON EL
COMANDO: (reset)
Efectos:
1. Se borran los hechos que hay en la lista de
hechos (no se borran reglas)
2. Los hechos definidos en deffacts se crean
en la lista de hechos
3. Se crea el hecho adicional (initial-fact)
con identificador f-0
Este hecho inicial se usa típicamente para
iniciar la ejecución del programa
(reset)
(facts)
f-0 (initial-fact)
f-1 (persona (nombre "Marta Paez")
(edad 33) (estatura 170) (color-
de-cabello rubio))
f-2 (persona (nombre "Diego Molina")
(edad 25) (estatura 168) (color-
de-cabello negro))
f-3 (persona (nombre "Luz Perez Daza")
(edad 19) (estatura 166) (color-
de-cabello negro))
For a total of 4 facts.
SE PUEDEN CREAR HECHOS SIN TENER UN DEFTEMPLATE
CORRESPONDIENTE:

(assert (jefe Hector Luis))


(assert (jefe Diego Hector))
(assert (tallas 12 32 34 36 40))

Estos se llaman hechos ordenados, y a


ellos CLIPS les crea un deftemplate
implícito
REGLAS
(defrule nombre “comentario opcional”
(patron-1) . . . . (patron-n)
=>
(accion-1) . . . . (accion-m) )

El nombre de cada regla debe ser único.


Sean estas dos plantillas:
(deftemplate peligro (slot tipo))
(deftemplate respuesta (slot accion))

Ejemplo de regla:
(defrule peligro-presion “regla ejemplo”
(peligro (tipo presion-excesiva))
=>
(assert (respuesta
(action abrir-valvula))))
AGENDA
CLIPS coloca en la Agenda las reglas cuyos
patrones antecedente concuerdan con hechos.
El contenido de la Agenda se puede
inspeccionar con el comando agenda
(AGENDA)
0 emergencia-tipo-1: f-0
0 emergencia-tipo-2: f-1
5 ambulancia-libre: f-2
OTROS COMANDOS

• (CLEAR)
RESTAURA EL ESTADO INICIAL DE CLIPS: BORRA TODOS LOS
HECHOS Y TODAS LAS REGLAS, REINICIA A CERO EL
IDENTIFICADOR DE HECHOS.

• (RUN)
EJECUTA EL PROGRAMA. ESTE TERMINA CUANDO YA NO HAY
ACTIVACIONES EN LA AGENDA

• (PRINTOUT T “HOLA MUNDO !” CRLF)


VARIABLES
COMIENZAN POR SIGNO DE INTERROGACIÓN.
EJEMPLOS:
?PRECIO
?NN
?COLOR
DURANTE LA COMPARACIÓN DE
ANTECEDENTES DE REGLAS CON HECHOS, SI
HAY CONCORDANCIA ENTRE UN PATRÓN QUE
TENGA VARIABLES Y UN HECHO, LAS
VARIABLES SE ENLAZAN A LOS VALORES
CORRESPONDIENTES DENTRO DEL HECHO;
SON VALORES VÁLIDOS DENTRO DE LA
REGLA.
VARIABLES EN REGLAS
EJEMPLO, SEA LA REGLA:

(defrule R-abuelo
(papa ?x ?y )
(papa ?y ?z )
=>
(assert (abuelo ?x ?z ) )
)
VARIABLES EN REGLAS
Y SEAN LOS HECHOS:
(papa agustin pedro )
(papa pedro hernando )
La regla R-abuelo se activa ( agenda), y al
ejecutarse resultan las asignaciones:
?x  agustin
?y  pedro
Y se crea el hecho:
(abuelo agustin hernando )
COMODINES (“WILDCARDS”)
A VECES EN LA COMPARACIÓN DE PATRONES Y HECHOS EXISTEN
CAMPOS EN UN HECHO CUYOS VALORES NO NOS INTERESAN
PARA LO QUE QUEREMOS, PERO DEBEN TENERSE EN CUENTA
PARA QUE HAYA CONCORDANCIA.

Sea el hecho: (nombre jose luis ramirez)


El patrón: (nombre ? ? ramirez)
hace concordancia con ese hecho y
todos los que tengan 2 nombres y
“ramirez”.
COMODINES (“WILDCARDS”)
El patrón: (nombre ? $? ramirez)
hace concordancia con hechos como:
(nombre jose luis ramirez)
(nombre hugo ramirez)
(nombre luis pablo maria ramirez)

$? comodín para cero o más campos


EJECUTANDO
CLIPS> (deftemplate persona (slot nombre)
(slot edad) (slot estatura) (slot color-de-cabello))
CLIPS> (assert (persona (nombre juan)
(edad 30) (estatura 173) (color-de-cabello rubio)))
<Fact-0>
CLIPS> (assert (persona (nombre pedro)
(edad 20) (estatura 166) (color-de-cabello negro)))
<Fact-1>
CLIPS> (defrule hallar-rubios
(persona (nombre ?nn)
(color-de-cabello rubio))
=>
(printout t ?nn " es rubio" crlf))

CLIPS> (run)
juan es rubio
CLIPS>
UN EJEMPLO CON 2 REGLAS
CLIPS> (assert (perro rintintin))
<Fact-0>
CLIPS> (assert (perro lassie))
<Fact-1>
CLIPS> (assert (perro laika))
<Fact-2>
CLIPS> (assert (gato felix))
<Fact-3>
CLIPS> (assert (gato garfield))
<Fact-4>
<CLIPS>
CLIPS> (defrule ladran ""
(perro ?x)
=>
(assert (ladra ?x))
(printout t "ladra " ?x crlf))
CLIPS> (defrule maullan ""
(gato ?x)
=>
(assert (maulla ?x))
(printout t "maulla " ?x crlf))
CLIPS>
CLIPS> (facts)
f-0 (perro rintintin)
f-1 (perro lassie)
f-2 (perro laika)
f-3 (gato felix)
f-4 (gato garfield)
For a total of 5 facts.
CLIPS>
CLIPS> (run)
maulla garfield
maulla felix
ladra laika
ladra lassie
ladra rintintin
CLIPS>
CLIPS> (facts)
f-0 (perro rintintin)
f-1 (perro lassie)
f-2 (perro laika)
f-3 (gato felix)
f-4 (gato garfield)
f-5 (maulla garfield)
f-6 (maulla felix)
f-7 (ladra laika)
f-8 (ladra lassie)
f-9 (ladra rintintin)
For a total of 10 facts.
CLIPS>
PRIORIDADES DE LAS
REGLAS
A las reglas se les puede asignar una
prioridad (“salience”). Estas se pueden
declarar así:
(DECLARE (SALIENCE 25) )
en la regla, entre el comentario opcional y
el primer patrón del antecedente.
El valor puede ir de -10000 a +10000.
Si no se declara, CLIPS asume un valor
de cero.
ORDEN DE EJECUCIÓN DE LAS
REGLAS
En la Agenda las reglas de mayor valor
“salience” se colocan sobre las de menor
valor, y se ejecutan primero.
Dentro de reglas de igual “salience”, la
colocación de las reglas en la agenda
está determinada por una estrategia de
resolución de conflictos basada en el
orden en que se van activando las reglas.
GRACIAS.

Você também pode gostar