Amit,
I just did something like this yesterday....
First I wrote a defquery as you suggested:
(defquery find-foo-by-name
(declare (variables ?name))
(foo (name ?name)))
This returns an iterator of all foos with the given name....
Now, I added a function to wrap the query:
(deffunction get-foos-by-name (?name)
"Returns a foo reference of a given name"
(bind ?itt (run-query find-foo-by-name ?name))
(while (?itt hasNext)
(bind ?token (call ?itt next))
(bind ?factRef (call ?token fact 1)))
(return ?factRef)))
Now, from the RHS of a rule, you should be able to write something like:
(defrule foo-res
(foo (name ?x))
=>
(call (get-foos-by-name (?name)) assign)))
Hope this works...Ernest will probably have something more elegant! :-D
Cheers!
-JM
------
------------------------
Jason Morris
Morris Technical Solutions
[EMAIL PROTECTED]
www.morristechnicalsolutions.com
fax/phone: 503.692.1088
deffunction to wrap the defquery
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Behalf Of Amit Chopra
> Sent: Thursday, May 27, 2004 10:58 AM
> To: [EMAIL PROTECTED]
> Subject: JESS: Getting a handle to the fact that matched given pattern
>
>
> Hi all,
>
> I am trying to find the fact that matches a given pattern in rule.
> I tried something, but it wouldn't work.
>
> I want to do something like this (this does not work in Jess, its
> pseudocode). foo is a shadow fact of a java object that has a
> method, lets say, 'assign'.
>
> > (defrule foo-res
> (foo (name ?x)) => (call 'fact that matched' assign))
>
> I want to know how to find 'fact that matched' to be able
> to call assign on it.
>
> I suspect I'll have to use defquery to do this. But then,
> matching and searching are not atomic, in that, they'll
> be two separate operations.
>
> Help is appreciated.
>
> Sincerely,
> Amit.
>
> --------------------------------------------------------------------
> To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
> in the BODY of a message to [EMAIL PROTECTED], NOT to the list
> (use your own address!) List problems? Notify [EMAIL PROTECTED]
> --------------------------------------------------------------------
>
--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
in the BODY of a message to [EMAIL PROTECTED], NOT to the list
(use your own address!) List problems? Notify [EMAIL PROTECTED]
--------------------------------------------------------------------