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

Reply via email to