Está en la página 1de 22

CLIPS

CLIPS

• CLIPS (C Language Integrated


Production System) es una herramienta
Seminario de

de procesado simbólico utilizada


principalmente para el desarrollo de
SE.
• Un programa en CLIPS consiste en
definir un conjunto de reglas para
Fundamentos de Inteligencia Artificial

resolver el problema.

• Tipos de datos
• Hechos
• Variables globales
• Representación del conocimiento:
⌫Conocimiento heurístico-Reglas
⌫Conocimiento procedural-
Funciones

1
Tipos de datos
CLIPS

Clips proporciona 8 tipos de datos para


representar la información:
Seminario de

Float Información
Integer numérica

Symbol
Información
Fundamentos de Inteligencia Artificial

String simbólica
External-address
Fact-address
Instance-name
Instance-address

Symbol: Cualquier secuencia de


caracteres que empieza con cualquier
carácter ASCII y sigue con 0 ó más
caracteres ASCII.

2
Tipos de datos
CLIPS

String: conjunto de caracteres que


empieza por “ y sigue con cero o más
Seminario de

caracteres. Termina con “.


“foo” “a\”volar”
External-address: es la dirección de una
estructura de datos externa devuelta
Fundamentos de Inteligencia Artificial

por una función. Dentro de clips la


representación impresa es: Dirección
externa
<Pointer-XXXXXX>
Fact: lista de valores atómicos que son
referenciados o posicionalmente
(ordenados) o por su nombre (no
ordenados). Índice del
<Fact-XXX> hecho

Instance: Objeto que es una instanciación


de una clase. Un instance-name se forma
encerrando un símbolo entre corchetes.
[motor-1]

3
Hechos (Facts)
CLIPS

• Son una de las formas básicas de alto


nivel para representar información.
Seminario de

• Cada hecho representa un fragmento


de información que se ha localizado en
la lista actual de hechos: fact-list.
• Para añadir un hecho a la fact-list:
Assert
Fundamentos de Inteligencia Artificial

• Para eliminar un hecho:


Retract
• Para modificarlo:
Modify
• Para duplicarlo:
Duplicate
• Un hecho puede especificarse por su
índice (fact-index) o por su dirección
(fact-address).
• Un identificador de hecho es una
notación corta para visualizar un
hecho. Ejemplo: f-10
índice
4
Hechos
CLIPS

•Un hecho se puede almacenar de dos


formas:
Seminario de

⌫Ordenado
⌫No ordenado
Hechos ordenados
•Consisten de un símbolo seguido por
Fundamentos de Inteligencia Artificial

una secuencia de cero o más campos


separados por espacios y delimitado po
paréntesis.
•El primer campo especifica una relación
que se aplica al resto de campos del
hecho:
(color pelota rojo)
(asignaturas FIA TIA AIA)
•Los campos pueden ser de cualquier
tipo de dato excepto el primero que debe
ser un símbolo.

5
Hechos
CLIPS

Hechos no ordenados
• También llamados deftemplate.
Seminario de

Permiten al usuario abstraer la


estructura de un hecho asignando un
nombre a cada campo de un hecho.
• El constructor deftemplate se usa para
crear este tipo de hechos. Es similar a
Fundamentos de Inteligencia Artificial

una definición de estructura en C.


(deftemplate persona
(slot nombre)
(slot sexo)
(slot altura)
(slot peso)
(multislot otros))
• Con este constructor se define el
nombre de una plantilla con cero o más
nombres de campos o slots. A los slots
se les puede poner restricciones de
tipo, valor y rango numérico.

6
Hechos
CLIPS

(deftemplate persona
(slot nombre
Seminario de

(type SYMBOL))
(slot sexo
(allowed values M H))
(slot altura
Fundamentos de Inteligencia Artificial

(type INTEGER)
(range 0 300)
(slot peso
(type SYMBOL)))

• También se puede especificar valores


por defecto para los slots.
• El atributo default especifica un valor
por defecto. Las expresiones
especificadas se evalúan cuando se
define el deftemplate y se almacena el
resultado junto con la plantilla. Estos
resultados se asignan al slot apropiado
cuando se inserta un nuevo hecho.
7
Hechos
CLIPS

• Si se especifica la palabra ?DERIVE,


entonces se deriva un valor por
Seminario de

defecto a partir de las restricciones del


slot.
• Si se especifica la palabra clave
?NONE, entonces hay que especificar
Fundamentos de Inteligencia Artificial

un valor para el slot cuando se inserta


ese hecho.
(deftemplate objeto
(slot nombre (default ?NONE))
(slot color)
(slot peso))

(assert (objeto))

(assert (objeto (nombre pelota)))

8
Hechos
CLIPS

Constructor deffacts
Permite que se defina una lista de
Seminario de

hechos automáticamente siempre


que se realiza el comando reset.
(deffacts inicio “ Estado inicial”
Fundamentos de Inteligencia Artificial

(habitación luz apagada)


(habitación puerta abierta)
(habitación ventana cerrada)
(objeto (nombre pelota)
(color rojo)
(peso 2)))
Después del comando clear, CLIPS
automáticamente construye lo
siguiente:
(deftemplate initial-fact)
(deffacts initial-fact
(initial-fact))
9
Variables globales
CLIPS

• El constructor defglobal permite que se


definan variables.
Seminario de

(defglobal
?*cantidad* = 9
?*x* = 10
Fundamentos de Inteligencia Artificial

?*z* = (+ ?*cantidad* ?*x*))

• La función bind se usa para cambiar el


valor de una variable global.
(bind ?*x* 40)

• Las variables globales no pueden


usarse como un parámetro variable
para una función.

10
Reglas
CLIPS

• Una regla es un conjunto de condiciones


y de acciones que se ejecutan cuando se
Seminario de

cumplen las condiciones. CLIPS lleva


incorporado el motor de inferencia.

(defrule regla1 “ Regla de ejemplo”


(objeto
Fundamentos de Inteligencia Artificial

(color rojo)
(peso ?p&: (> ?p 1))
)
=>
(printout t “La regla 1 se cumple”)
)
• Sintaxis:
(defrule <nombre> [“comentario”]
[(declare (salience <expr. númerica>))]
[<elementos de condición>]
=>
[<acciones>])

11
Reglas
CLIPS

• El ciclo de ejecución es: Se comprueban


las reglas que se activan debido a sus
Seminario de

condiciones. Estas reglas se añaden a la


agenda del módulo donde está
definida la regla. La agenda es una lista
de todas las reglas cuyas condiciones se
han cumplido y puede ser consultada
Fundamentos de Inteligencia Artificial

con la función (agenda) o en la ventana


correspondiente.
• Los elementos de condición de una
regla se consideran como si estuvieran
englobados en un and.
Elementos de condición
• Restricción literal: utilizan un patrón
literal,tanto de hechos estructurados
como de no estructurados.
(defrule R1
(persona (nombre Miguel))
=>)

12
Reglas
CLIPS

• Comodín: hay dos símbolos (?: cualquier


valor de un campo simple, $?: cualquier
Seminario de

valor en 0 o más campos).


(defrule R2
(objeto (nombre ?))
=>)
Fundamentos de Inteligencia Artificial

• Conectivas: Las conectivas permitidas


son:& (and), |(or) y ~ (not).
(defrule R3
(objeto (nombre pelota|balón))
=>)
• Predicados: Se utilizan para restringir los
valores a buscar. La sintaxis es
añadiendo dos puntos al principio de la
llamada al predicado.
(defrule R4
(persona (altura ?x&:(evenp ?x)))
=>)

13
Reglas
CLIPS

• Valor de retorno de una función: Se


realiza precediendo la llamada a la
Seminario de

función con el símbolo =.


(defrule R5
(objeto (peso ?p&=(* 2 ?*global*)))
=>)
• Elemento condicional test. Se emplea
Fundamentos de Inteligencia Artificial

asociado a una llamada a función y


permite aplicar una función a varios
hechos.
(defrule R6
(dato1 ?x)
(dato2 ?y)
(test (>= ?x ?y))
=>)
• Elementos condicionales: or, and y not.
(defrule R7
(or (objeto (nombre pelota))
(persona (nombre pelota)))
=>)

14
Funciones
CLIPS

•Fragmento de código ejecutable


identificado por un nombre específico
Seminario de

que devuelve un valor útil o realiza un


efecto lateral útil.
•Con el constructor deffunction se
pueden definir funciones.
(deffunction f “función de prueba”
Fundamentos de Inteligencia Artificial

(?x ?y ?z)
(printout (+ ?x ?y ?z)))
•Se permite la recursividad. La
recursividad mutua entre dos funciones
se debe realizar declarando una de ellas
antes.
•Sintaxis:
(deffuntion <nombre>
[“comentario”]
(<lista de parámetros> [$resto])
cuerpo de la función)

15
Funciones
CLIPS

• La lista de parámetros puede ser vacía.


Si queremos que la llamada a la
Seminario de

función tenga un número de


parámetros no fijo, hay que declarar el
último de ellos como resto.
(deffunction f (?a ?b $?otros)
(printout t ?a ?b ?otros))
Fundamentos de Inteligencia Artificial

En ?otros hay una lista con los


parámetros restantes

(f 1 2 3 4 5)
(f 1 2)

• La función devuelve el último valor


evaluado. Si no existe ese último valor
se devuelve FALSE.

16
Funciones de predicado
CLIPS

• (numberp <expr>): devuelve TRUE si el nº


pasado como parámetro es un número.
Seminario de

• (floatp <expr>): ídem reales.


• (integerp <expr>): ídem entros.
• (stringp <expr>): ídem string.
• (symbolp <expr>): ídem símbolo.
Fundamentos de Inteligencia Artificial

• (evenp <expr>): ídem número par.


• (oddp <expr>): ídem número impar.
• (eq <expr1> <expr2>): devuelve TRUE si
las expresiones son iguales.
• (neq <expr1> <expr2>): ídem distintas
• (= <expr1> <expr2>): compara igualdad de
expresiones numéricas.
• (<> <expr1> <expr2>): compara
desigualdad de expresiones numéricas.
• (and <expr1> ....)
• (or <expr1> ....) Operadores lógicos
• (not <expr>)

17
Funciones de valor multicampo
CLIPS

• (create$ <expr1> ...): crea una lista con


los resultados de evaluar las
Seminario de

expresiones.
(create$ (+ 2 3) 7 90) (5 7 90)
• (nth$ <entero> <VM>): devuelve el
dato del valor multicampo que aparece
Fundamentos de Inteligencia Artificial

en la posición que indica el número


entero. Los índices empiezan por uno.
• (member$ <valor> <VM>): devuelve
TRUE cuando valor aparece en VM.
FALSE en caso contrario.
• (delete$ <VM> <P> <F>): borra de VM
los valores desde el valor en la posición
indicada por P hasta el valor en la
posición indicada por F.
• (rest$ <VM>): devuelve el valor
multicampo eliminando el primer
elemento.

18
Funciones de cadena
CLIPS

• (str-cat <expr1> ...): concatena los


argumentos en una cadena.
Seminario de

(str-cat h o l a) hola

• (str-length <expr>): longitud de la


expresión.
Fundamentos de Inteligencia Artificial

(str-length hola) 4

• (str-index <expr1> <expr2>): devuelve


la posición donde aparece expr1 dentro
de expr2.
(str-index bola carambola) 6

19
Funciones de entrada/salida
CLIPS

• (open <nombre> <descriptor>


[“modo”]): abre un fichero. Modo
Seminario de

puede ser ”r”, “w”, “r+” y “a”.


• (close <descriptor>): cierra un fichero.
• (printout <descriptor> <expresión>):
imprime a un fichero. Si descriptor es
Fundamentos de Inteligencia Artificial

el valor t, se escribe en la salida


estándar.
(printout t hola)
• (read [<descrptor>]): lee del fichero
que indica descriptor o de la entrada
estándar.
• (format <descriptor> <cadena de
formato> <expr1> ...): formatea una
cadena. Los flags indican el tipo de
argumento y deben ir precedidos del
símbolo %. Algunos valores de los
flags son: d (entero), f (flotante), s
(cadena) y n (retorno de línea).
20
Procedimientos
CLIPS

• (bind <variable> <expr>): asigna valor


a una variable global.
Seminario de

(bind ?*x* 10)


• (if <expr> then <acción> ... [else
<acción> ...]): nos permite declarar una
estructura de control condicional.
Fundamentos de Inteligencia Artificial

(if (> 2 1) then


(printout t “Cierto”))
• (while <expr> [do] <acción>):
implementa un bucle de control que se
ejecuta hasta que la expresión se evalúe
a FALSE.
• (return [<expr>]): fuerza el retorno de
una función.
• (break): rompe el ciclo de un bucle.

21
Comandos
CLIPS

• (load <nombre>): carga un fichero con


definiciones en CLIPS.
Seminario de

• (save <nombre>): salva las


declaraciones que hayamos efectuado
desde la línea de comandos.
• (clear): elimina todas las declaraciones
y hechos del entorno.
Fundamentos de Inteligencia Artificial

• (reset): inserta los deffacts y elimina las


activaciones de la agenda.
• (exit): salir.
• (facts): muestra los hechos actuales.
• (show-globals): Muestra las variables
globales.
• (agenda): muestra las activaciones de
las reglas cuyas condiciones se
cumplen.
• (run): ejecución de las reglas de la
agenda.

22

También podría gustarte