[rules-users] Forward references within "when" clauses

Art Griesser griesser at nist.gov
Tue Apr 10 15:12:32 EDT 2007


Hello,

Is it possible to write a rule that specifies two objects hold on to  
each other?

When saving the following snippet, the Eclipse IDE complains <<Unable  
to return Declaration for identifier 'a'>>:

rule "purple-eyed_ozies"
	when
		p : Person(eye_color == "purple", nm : name,  address == a )
		a : Address( person == p,  country == "oz")
	then
		System.out.println( "Found purple-eyed ozian: "+nm );
end

If I can avoid it, I would rather not use keys or object ids to  
implement the association or link. For whatever it may be worth, I am  
trying to duplicate the following experiment that works in JESS:

(deftemplate person (slot name) (slot eye_color) (slot address) )
(deftemplate address (slot person) (slot street) (slot city) (slot  
zip) (slot country) )

(deffunction people ()

(bind ?p (assert(person (name rincewind) (eye_color octarine))))
(bind ?a (assert(address (country klatch) (person ?p))))
; Yes, when we break the bidirectional relationship
; by commenting out the next line, rincewind is no longer found.
(modify ?p (address ?a))

(bind ?p (assert(person (name atuin) (eye_color purple))))
(bind ?a (assert(address (country klatch) (person ?p))))
(modify ?p (address ?a))

(bind ?p (assert(person (name barney) (eye_color purple))))
(bind ?a (assert(address (country oz) (person ?p))))
(modify ?p (address ?a))

(bind ?p (assert(person (name scarecrow) (eye_color octarine))))
(bind ?a (assert(address (country oz) (person ?p))))
(modify ?p (address ?a))

)

(defrule purple-eyed_ozies
   ?p <- (person (eye_color purple) (name ?nm) (address ?a))
   ?a <- (address (person ?p) (country oz))
   =>
   (printout t "Found purple-eyed ozian: " ?nm "
"))

(defrule octarine-eyed_klatchians
   ?a <- (address (country klatch) (person ?p))
   ?p <- (person (eye_color octarine) (name ?nm) (address ?a))
   =>
   (printout t "Found octarine-eyed klatchian: " ?nm "
"))

(people)
(run)
(exit)

Thank you,
Art



More information about the rules-users mailing list