Be Assertive
One common use of variables is to match a value on the LHS and then assert this bound variable on the RHS. For example, enter
(default make-quack
( duck-sound ?sound)
=>
(assert (sound-is ?sound)))
Variable more than once
(default make-quack ( duck-sound ?sound)One common use of variables is to match a value on the LHS and then assert this bound variable on the RHS. For example, enter
(default make-quack
( duck-sound ?sound)
=>
(assert (sound-is ?sound)))
Variable more than once
- Be sure to do a (reset) and assert (duck-sound quack) again.
=>
(assert (sound-is ?sound ?sound)))
- When the rule fires, it will produce (sound-is quack quack) since the variable ?sound is used twice.
- (duckshoot ?hunter ?who)
CLIPS> (defrule whohunt
(duckshoot ?hunter >who)
=>
(printout t ?hunter "shot" ?who crlf))
(assert (duckshoot Brian duck))
Retraction
- Retraction is very useful in expert system and usually done on the RHS rather than at the top-level. Before a fact can be retracted, it must be specified to CLIPS. To retract a fact from a rule, the fact-address first must be bound to a variable on the LHS.
- However, if you want to remove the fact whose contents are, you must first tell CLIPS the address of the fact to be retracted.
- The fact-address is specified using the left arrow, "<-". To create this, just type a "<" symbol followed by a "-"
? Ad <- (bachelor Ali)
=>
(Printout t "Ali is now happily married" ?Ad crlf)
(retract ?Ad)
(assert (bachelor Ali))
(run)
(defrule get-married
? Ad <- (bachelor Ali)
=>
(Printout t "Ali is now happily married" ?Ad crlf)
(retract ?Ad)
(deffacts good-prospects
(bachelor Ali)
(bachelor Aslam)
(bachelor Abid)
(reset)
(run)
Single-field wildcard
- Instead of binding a field value to a variable, the presence of a nonempty field can be detected alone using a wildcard.
- This type of situation, in which only part of the fact is specified, is very common and very important. To solve this problem, a wildcard can be used to fire the Richards.
- The simplest form of wildcard is called a single-field wildcard and is shown by a question mark, "?". The "?" is also called a single -field constraint.
- A single-field wildcard stands for exactly one field.
(defrule meeting)
(meeting-with Irawen ?)
=>
(printout t "The meeting will be with Irawen.. " crlf))
(deffacts M1
(meeting-with Pirawen)
(meeting-with Ntirawen)
(meeting-with Irawen)
(meeting-with Isirawen)
(meeting-with gkirawen)
(reset)
(run)
No comments:
Post a Comment