/
CLIPS-COOL CLIPS-COOL

CLIPS-COOL - PowerPoint Presentation

alida-meadow
alida-meadow . @alida-meadow
Follow
434 views
Uploaded On 2015-10-04

CLIPS-COOL - PPT Presentation

By Dr Christel Kemke Department of Computer Science University of Manitoba CLIPS Classes COOL Intro to CLIPS Classes COOL class definition class specification slot specification facets ID: 149928

speed message class slot message speed slot class handler put instance send facet handlers titanic object pattern defmessage instances

Share:

Link:

Embed:

Download Presentation from below link

Download Presentation The PPT/PDF document "CLIPS-COOL" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

CLIPS-COOL

By:

Dr

.

Christel

Kemke

Department of Computer Science

University of ManitobaSlide2

CLIPS – Classes (COOL)

Intro to CLIPS – Classes (COOL)

class definition

class specification

slot specification, facets

instance creation

message-handlers

Classes and rulesSlide3

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. Slide4

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.Slide5

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 [ ... ]Slide6

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. Slide7

System-defined Message-Handlers

retrieving and storing slot-values

retrieve

(

send

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

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-getSlide9

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) Slide10

if-then-else in Message-Handlers

Control 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))

)Slide11

Classes and Meta-Classes in CLIPS

OBJECT

USER

Liner

Ship

Titanicdomain instances

user

defined

classes

system

defined classes

INSTANCES

CLASSESSlide12

Objects and Rules

How to connect objects (instances) with rules?

read slot-values

- use object (instance and slot-values) in

condition part

of rulewrite slot-values - include put-messages in action-part of ruleSlide13

Objects in Condition Part of Rule

Solution 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))

=> ... )Slide14

Objects in Condition Part of Rule

Use 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 )

)Slide15

Objects in Condition Part of Rule

Use variables instead of instance-names

Example 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 )

)Slide16

Objects in Action Part of Rule

In the action-part of a rule, a message to an instance

can 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))Slide17

Objects in Action Part of Rule

Use variables instead of instance-names

Example 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))Slide18

Objects in Action Part of Rule

Task:

Define a rule which contains instead of a test-condition

a field-constraint with predicate expression to constrain

the 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))Slide19

CLIPS - DefinitionsSlide20

A

defclass

is a construct for specifying the

properties (slots) of a class of objects

.

A defclass consists of four elements: a name, a list of superclasses from which the new class inherits slots and message-handlers, a specifier saying whether or not the creation of direct instances of the new class is allowed and 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 DescriptionSlide21

(

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 | afterDEFCLASS - SyntaxSlide22

<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>Slide23

<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>)Slide24

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.Slide25

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>*)Slide26

DEFMESSAGE HANDLER

Objects 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. Slide27

DEFMESSAGE HANDLER

A

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, anda 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.Slide28

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>Slide29

DEFMESSAGE HANDLER

Within a class, the

handlers for a particular message

can be further subdivided into

four types

or categories: primary, before, after and around.Slide30

(

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 FiringSlide31

;; 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))Slide32

;; 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))