Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
CLIPS from Facts to Objects
Representando el conocimiento del problema
Creando Hechos Ordenados • Asertamos Han Solo como un hecho
de tipo sw-card
(assert
(sw-card
501 ;Number
6 ; BuildCost
“Han Solo” ;Name
Both ; SideSymbol
50 ;Speed
4 ;Power
5 ;Health
Character ;Type
) )
<Fact-1>
Operaciones con hecho ordenados
• Visualización de hechos (facts)
f-0 (initial-fact)
f-1 (sw-card 501 6 "Han Solo" Both 50 4 5 Character)
• Eliminar hechos (retract 1) (retract *)
• Consulta de hechos [12.9.12 Fact-set Queries and Distributed Actions]
Definición de Hechos No-Ordenados
• Definimos el tipo de dato: sw-card (deftemplate sw-card “carta de SW-JCC” (slot Number) (slot Player) (slot BuildCost) (slot Name) (slot SideSymbol) (slot Speed) (slot Power) (slot Health) (slot Type) )
Creando Hechos No-Ordenados
• Asertamos Han Solo como un hecho de tipo sw-card
(assert (sw-card (Number 501) (BuildCost 6) (Name "Han Solo") (SideSymbol Both) (Speed 50) (Power 4) (Health 5) (Type Character) ) ) ¿Y si ejecuto un (reset) ? Queda eliminado
Hechos no-ordenados INICIALES (similar en hechos ordenados)
• Definimos los hechos iniciales • De mano no se asertan (deffacts sw-inicial "cartas iniciales" (sw-card (Number 501) (BuildCost 6) (Name "Han Solo") (SideSymbol Both) (Speed 50) (Power 4) (Health 5) (Type Character) ) ) ¿Y si ejecuto un (reset) ? Se regeneran los hechos iniciales
Operaciones con hechos No-ordenados
• Mostrar plantilla / Listar plantillas / Borrar plantilla (ppdeftemplate sw-card) (list-deftemplates) (undeftemplate sw-card)
• Visualización/Eliminar hechos – Como con hechos ordenados
• Modificar campos de un hecho (modify 1 (Name “Indiana Jones") ) HECHO REGENERADO: Índice 2
• Consulta de hechos – Basic Programming Guide (bpg.pdf)
• 12.9.12 Fact-set Queries and Distributed Actions
– Desde las premisas de las reglas • (Siguientes sesiones)
POO: Definiendo una clase
• Definimos la clase: sw-card (defclass sw-card "carta de SW-JCC" (is-a USER) (slot Number) (slot Player) (slot BuildCost) (slot Name) (slot SideSymbol) (slot Speed) (slot Power) (slot Health) (slot Type) )
• Definimos la plantilla : sw-card (deftemplate sw-card "carta de SW-JCC" (slot Number) (slot Player) (slot BuildCost) (slot Name) (slot SideSymbol) (slot Speed) (slot Power) (slot Health) (slot Type)
)
COOL: CLIPS Object Oriented Language
POO: Definiendo una clase
• Definimos la clase: SW <rol> ::= (role concrete | abstract) <rol-en-patrones-de-reglas > ::= (pattern-match reactive | non-reactive) <slot> ::= (slot <nombre> <faceta>*) | (single-slot <nombre> <faceta>*) | (multislot <nombre> <faceta>*) <documentación-método> ::= (message-handler <nombre> [<handler-type>]) <handler-type> ::= primary | around | before | after
(defclass <nombre> [<comentario>] (is-a <nombre-superclase>+) [<rol>] [<rol-en-patrones-de-reglas>] <slot>* <documentación-método>* )
Facetas de un slot
• (slot <nombre> <faceta>*) <default-faceta> ::=
(default ?DERIVE | ?NONE | <expression>*) |
(default-dynamic <expression>*)
<storage-faceta> ::= (storage local | shared)
<access-faceta> ::= (access read-write | read-only | initialize-only)
<propagation-faceta> ::= (propagation inherit | no-inherit)
<source-faceta> ::= (source exclusive | composite)
<pattern-match-faceta> ::= (pattern-match reactive | non-reactive)
<visibility-faceta> ::= (visibility private | public)
<create-accessor-faceta> ::= (create-accessor ?NONE | read | write | read-write)
<override-message-faceta> ::= (override-message ?DEFAULT | <message-nombre>)
POO: Definiendo una clase (defclass Card "carta del juego Star Wars - JCC"
(is-a USER)
(role abstract)
(slot Number (access initialize-only) (visibility public))
(slot Player (access initialize-only) (visibility public))
(slot BuildCost (access initialize-only) (visibility public))
(slot Name (access initialize-only) (visibility public))
(slot SideSymbol (access initialize-only) (visibility public))
(slot Speed (access initialize-only) (visibility public))
(slot Power (access initialize-only) (visibility public))
(slot Health (access initialize-only) (visibility public))
(slot Type (access initialize-only) (visibility public))
)
(defmessage-handler Card imprime-descripcion()
; Produce: una descripcion de la carta por la salida estandar
(printout t ?self:Name " (BC:" ?self:BuildCost " Spd:" ?self:Speed " Pow:" ?self:Power " Hea:" ?self:Health " Typ:" ?self:Type ")")
)
Creando Una instancia e Invocando métodos
• Creamos la instancia Han Solo de la clase sw-card
(make-instance [han_solo_01] of sw-card (Number 501) (BuildCost 6) (Name "Han Solo") (SideSymbol Both) (Speed 50) (Power 4) (Health 5) (Type Character) ) • Invocamos métodos de la instancia (send [han_solo_01] print) (send [han_solo_01] get-Speed) (send [han_solo_01] put-Speed 70) (send [han_solo_01] delete)