by: dr. christel kemke department of computer science university of manitoba

32
CLIPS-COOL By: Dr. Christel Kemke Department of Computer Science University of Manitoba

Post on 21-Dec-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

CLIPS-COOL

By:

Dr. Christel KemkeDepartment of Computer ScienceUniversity of Manitoba

Page 2: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

CLIPS – Classes (COOL)Intro to CLIPS – Classes (COOL)class definition

class specificationslot specification, facets

instance creationmessage-handlersClasses and rules

Page 3: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

CLIPS – Example Classes(defclass person

(is-a USER) ;provides reference to system-defined ;super-class USER

(role concrete) ;this class can have instances

(slot gender (type STRING)) ;just slots with type

(slot age (type NUMBER))) ;constraints

(defclass man

(is-a person)(slot gender (type STRING)(default

“male”)))Try: In the Browse-Menu, for the Defclass-Manager and check the messagehandlers of these classes.

Page 4: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

CLIPS – Defining Classes(defclass person

(is-a USER) ;provides reference to system-defined ;super-class USER

(role concrete) ;this class can have instances

(pattern-match reactive)* ;instances of this class can be

;used for pattern-matching in rules

(slot <slot-name> ;slot-specification

(create-accessor read-write) * ;read / write accessor ;created for this slot

(default <default-value>) ;default-value for slot

... <other facets>* ... ))

* Class and Slot descriptions often have defaults, e.g. pattern-match reactive, or create-accessor read-write. Refer to the CLIPS bpg.

Page 5: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

CLIPS – Defining Instances(definstances people people is a list of instances

(mike of person of class person; instance (gender “male”) mike is created.(age 24)) )

(definstances men men is a list of instances of (mark of man class man; here only one (age 24)) ) instance named mark.

Try: (send [mark] get-gender) and (send [mike] get-gender)

Try: (send [mark] put-age 25)

Note: instance-names in messages have to be put in [ ... ]

Page 6: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

Message-Handlers(defmessage-handler

<class-name> <message-handler-name>

(<parameters>*)<body>

)

Some message-handlers like get-<slot-name> or put-<slot-name> are system pre-defined message-handlers.

Page 7: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

System-defined Message-Handlersretrieving and storing slot-valuesretrieve(send [instance] get-slot)e.g. (send [Titanic] get-speed)

store(send [instance] put-slot value)e.g. (send [Titanic] put-speed 20)

Page 8: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

Message-Handler - Example(defmessage-handler person birthday ()

(send ?self put-age (+ (send ?self get-age) 1)))

Message-Handler 'birthday' associated with class person (no parameter) sends a message to ?self to put-age to the current age + 1. It also works to use 'dynamic-put' which sends a put-message for the age to the current instance to which the birthday-message has been sent.

Try: (send [mark] birthday)

Try: substitute (send ?self ...) with dynamic-put or dynamic-get

Page 9: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

Parameters in Message-Handlers(defmessage-handler ship set-speed (?

x)(dynamic-put speed ?x))

)

Message-Handler set-speed associated with class ship sets the speed of the current instance to the value of ?x.

e.g. (send [Titanic] set-speed 20)

sends a message to the instance [Titanic] of ship

which evaluates to (dynamic-put speed 20);

or (send ?self put-speed 20)

Page 10: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

if-then-else in Message-HandlersControl Structures used in Message-Handlers.

instead of send to self: (dynamic-put speed 20))

instead of ?self:speed (dynamic-get speed))

Message-Handler 'slow-down' associated with class ship tests whether speed of addressed instance is > 30 and then sends a message to ?self to put-speed 20. It also works to use 'dynamic-put speed 20' which sends a put-message for speed to the current instance.

(defmessage-handler ship slow-down ()

(if (> ?self:speed 30)

then (send ?self put-speed 20))

)

Page 11: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

Classes and Meta-Classes in CLIPS

OBJECT

USER

Liner

Ship

Titanicdomain instances

user definedclasses

systemdefined classes

INSTANCES

CLASSES

Page 12: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

Objects and Rules How to connect objects (instances) with

rules?

1. read slot-values - use object (instance and slot-values) in condition part of rule

2. write slot-values - include put-messages in action-part of rule

Page 13: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

Objects in Condition Part of RuleSolution 1:

(object (name [<instance-name>]) (<slot-name> <slot-value>)* )

Example 1:

Comment: In the 'object'-pattern the name of the addressed instance is identified as [titanic] and the value for the slot speed (defined in the class ship) is determined as 20. This information is used for pattern matching.

(defrule if-titanic-goes-20-mph (object (name [titanic]) (speed 20))

=> ... )

Page 14: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

Objects in Condition Part of RuleUse variables instead of slot-values (corresponding to facts

used in rules, based on templates) Example 2:

Comment: In the 'object'-pattern the speed of the referenced object (instance [titanic]) is bound to variable ?speed which can be used later in the printout-function.

(defrule titanic-goes-at-what-speed (object (name [titanic]) (speed ?speed))

=> (printout "Titanic goes at " ?speed " mph."

crlf ))

Page 15: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

Objects in Condition Part of RuleUse variables instead of instance-namesExample 3:

Comment: In the 'object'-pattern the variable ?name is bound to the referenced object (e.g. the instance [titanic]) and thus can be used later in the action-part.

(defrule any-ship-which-goes-20mph

(object (name ?name) (speed 20mph))

=>

(printout ?name " goes at 20 mph." crlf )

)

Page 16: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

Objects in Action Part of RuleIn the action-part of a rule, a message to an instancecan be send, corresponding to messages used in message-handlers.

(send [<instance-name>] <message>)

Example 4:

(defrule titanic-has-to-slow-down(object (name [titanic]) (speed ?speed))(test (> ?speed 30))

=> (send [titanic] put-speed 20))

Page 17: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

Objects in Action Part of RuleUse variables instead of instance-namesExample 5:

Comment: the variable ?name can be bound during pattern matching to an instance, e.g. [titanic], and a message (to put the value 20 into the speed-slot) is sent in the action-part to this instance.

(defrule ships-over-30mph-have-to-slow-down(object (name ?name) (speed ?speed))(test (> ?speed 30))

=> (send ?name put-speed 20))

Page 18: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

Objects in Action Part of RuleTask:Define a rule which contains instead of a test-condition a field-constraint with predicate expression to constrainthe matching instances to those whose speed is over 30.

(defrule slow-down-ships-which-go-over-30mph

(object (name ?name) (speed ?speed))

(test (> ?speed 30))=> (send ?name put-speed 20))

Page 19: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

CLIPS - Definitions

Page 20: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

A defclass is a construct for specifying the properties (slots) of a class of objects.

A defclass consists of four elements: 1) a name, 2) a list of superclasses from which the new class inherits slots

and message-handlers,

3) a specifier saying whether or not the creation of direct instances of the new class is allowed and

4) a list of slots specific to the new class. All user-defined classes must inherit from at least one class; COOL

provides predefined system classes for use as a base in the derivation of new classes.

Any slots explicitly given in the defclass override those gotten from inheritance.

COOL applies rules to the list of superclasses to generate a class precedence list

for the new class. Facets further describe slots. Some examples of facets include:

default value, cardinality, and types of access allowed.

DEFCLASS Description

Page 21: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

(defclass <name> [<comment>](is-a <superclass-name>+) superclass(es)[<role>] can instances be created?[<pattern-match-role>] can instances be used in pattern matching?<slot>* slots!<handler-documentation>*) methods associated with this class

<handler-documentation> ::= (message-handler <name> [<handler-type>])

<handler-type> ::= primary | around | before | after

DEFCLASS - Syntax

Page 22: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

<role> ::= (role concrete | abstract)

<pattern-match-role> ::= (pattern-match reactive | non-reactive)

<slot> ::= (slot <name> <facet>*) | (single-slot <name> <facet>*) | (multislot <name> <facet>*)

<facet> ::= <default-facet> | <storage-facet> | <access-facet> | <propagation-facet> | <source-facet> | <pattern-match-facet> | <visibility-facet> | <create-accessor-facet> <override-message-facet> |

<constraint-attributes>

Page 23: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

<default-facet>::= (default ?DERIVE | ?NONE | <expression>)<pattern-match-facet> ::= (pattern-match reactive | non-reactive)<visibility-facet> ::= (visibility private | public)<create-accessor-facet> ::= (create-accessor ?NONE | read | write | read-write)<override-message-facet> ::= (override-message ?DEFAULT | <message-name>)

Page 24: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

DEFINSTANCES

Similar to deffacts, the definstances construct allows the specification of instances which will be created every time the reset command is executed.

On every reset all current instances receive a delete message, and the equivalent of a make-instance function call is made for every instance specified in the definstances constructs.

Page 25: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

DEFINSTANCES - Syntax

(definstances <definstances-name> [<comment>] (<instance-definition>)*)

<instance-definition> ::= <instance-name-expression> of <class-name-expression>

<slot-override>*

<slot-override> ::= (<slot-name-expression> <expression>*)

Page 26: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

DEFMESSAGE HANDLERObjects are manipulated by sending them messages via the function send. The result of a message is a useful return-value or side-effect. A defmessage-handler is a construct for specifying the behavior of a class of objects in response to a particular message. The implementation of a message is made up of pieces of procedural code called message-handlers (or handlers for short). Each class in the class precedence list of an object's class can have handlers for a message. In this way, the object's class and all its superclasses share the labor of handling the message. Each class's handlers handle the part of the message which is appropriate to that class.

Page 27: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

DEFMESSAGE HANDLERA defmessage-handler is comprised of: • a class name to which to attach the handler (the class must

have been previously defined), • a message name to which the handler will respond, • an optional type (the default is primary), • an optional comment, • a list of parameters that will be passed to the handler during

execution, • an optional wildcard parameter, and• a series of expressions which are executed in order when the

handler is called. The return-value of a message-handler is the evaluation of the

last expression in the body.

Page 28: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

DEFMESSAGE HANDLER(defmessage-handler

<class-name> <message-name> [<handlertype>] [<comment>]

(<parameter>* [<wildcard-parameter>])<action>*)

<handler-type> ::= around | before | primary | after

<parameter> ::= <single-field-variable>

<wildcard-parameter> ::= <multifield-variable>

Page 29: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

DEFMESSAGE HANDLERWithin a class, the handlers for a particular message can be further subdivided into four types or categories:

1. primary, 2. before, 3. after and 4. around.

Page 30: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

(defclass pistol(is-a USER)(role concrete)(pattern-match reactive)(slot safety (type SYMBOL) (create-accessor read-write))

(slot slide (type SYMBOL) (create-accessor read-write))

(slot hammer (type SYMBOL) (create-accessor read-write))

(slot chamber (type INTEGER) (create-accessor read-write))

(slot magazine (type SYMBOL) (create-accessor read-write))

(slot rounds (type INTEGER) (create-accessor read-write))

)

CLIPS Example – Pistol Firing

Page 31: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

;; We associate message-handlers with ‘safety’ and ‘drop.’

(defmessage-handler pistol safety (?on-off) (dynamic-put safety ?on-off) (if (eq ?on-off on) then (dynamic-put hammer down)))

;; The ‘drop’ message-handler drops the magazine from the mag.

(defmessage-handler pistol drop () (dynamic-put magazine out))

Page 32: By: Dr. Christel Kemke Department of Computer Science University of Manitoba

;; We associate message-handlers with ‘safety’ and ‘drop.’

(defmessage-handler pistol safety (?on-off) (dynamic-put safety ?on-off) (if (eq ?on-off on) then (dynamic-put hammer down)))

;; The ‘drop’ message-handler drops the magazine from the mag well.

(defmessage-handler pistol drop () (dynamic-put magazine out))