Ir al contenido principal

Programacion Clips

Creando assert 

Desde la línea de comandos de CLIPS, puede “asertarse” un hecho mediante (assert):
 CLIPS> (assert (Pedro 45 V NO))

Registros

 Primero,  definiremos  el  tipo  de  dato  registro  con (deftemplate).  A  continuación, utilizaremos (assert) para establecer uno o varios hechos del tipo definido.

CLIPS> (deftemplate Persona
  (field Nombre)
  (field Edad)    
  (field Sexo) 
  (field EstadoCivil) )

CLIPS> (assert (Persona
    (Nombre Juan)
    (Edad 30)
    (EstadoCivil casado)
    (Sexo V)))

Cada  vez  que  se  añade  un  hecho  (vector  o  registro), CLIPS  devuelve  un identificador  de  hecho,  empezando  desde  0  (a  no  ser  que  se  haya  asertado automáticamente con (reset) el hecho inicial, en cuyo caso, éste es el que tiene índice 0).

Multifield

Dentro  de  un  template,  si  queremos  que  un  campo  sea un  vector  ordenado  de características, usamos el identificador multifield, en vez de field:

(deftemplate Persona
    (multifield Nombre)
    (field Edad)
)
(assert (Persona 
    (Nombre Juan Carlos Cubero)
    (Edad 33))
)

Reglas 


(defrule <nombre> <comentario>
    <patrón antecedente> + 
=>
    <consecuente> +
)

La parte  izquierda  de  la  regla  suele  llamarse  LHS  (Left  Hand  Side),  mientras  que  la parte derecha es RHS (Right Hand Side). La LHS está constituida por varios patrones. En ellos se establecen las condiciones que han  de  darse  sobre  los  elementos  de  la  memoria  de  trabajo  para  que  la  regla  pueda activarse. Los  consecuentes  pueden  consistir  en  la  adición  o  supresión  de  un  elemento  a  la memoria  de  trabajo  (ejecutando (assert)  o (retract))  o  la  ejecución  de  algún procedimiento (como, por ejemplo, (printout)).

(deffacts VariosHechosVectores
    (Persona Pedro 45 V SI)
    (Persona Maria 34 M NO)
)

(defrule ECivilPedro_Soltero
    (Persona Pedro 45 V NO)
=>
    (printout t crlf "Pedro está soltero")
)

(defrule ECivilPedro_Casado
    (Persona Pedro 45 V SI)
=>
    (printout t crlf "Pedro está casado")
)

(defrule ECivilMaria_Soltera
    (Persona Maria 34 M NO)
=>
    (printout t crlf "Maria está soltera")
)

Para que se ejecuten las reglas ejecutamos el siguiente comando

CLIPS> (run)