Re: JESS: Getting a handle to the fact that matched given pattern
Ernest and Jason, Thanks for replying, that should be adequate. amit. [EMAIL PROTECTED] wrote: I think Amit Chopra wrote: [Charset iso-8859-1 unsupported, filtering to ASCII...] > (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. OK, two things. First, to get a reference to the actual Fact object that matches any pattern in any rule, you simply bind that pattern to a variable in the rule left-hand-side using the "<-" operator: (defrule foo-res ?foo <- (foo (name ?x)) => ;; the variable ?foo is the matching jess.Fact object ... But second, as you say this is a shadow fact and you want to "call a method on it" I think what you mean is that you want to call a method on the object that's being shadowed. There's a reference to that object in the OBJECT slot of the shadow fact, so instead what you actually want to do is (defrule foo-res (foo (name ?x) (OBJECT ?foo)) => ;; the variable ?foo is the JavaBean and you can call "assign" - Ernest Friedman-Hill Science and Engineering PSEsPhone: (925) 294-2154 Sandia National LabsFAX: (925) 294-2234 PO Box 969, MS 9012 [EMAIL PROTECTED] Livermore, CA 94550 http://herzberg.ca.sandia.gov 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]
RE: JESS: Getting a handle to the fact that matched given pattern
Amit, Page 90 of Jess In Action talks about the OBJECT slot of a shadow fact and how it always contains a reference to its parent JavaBean. so... assuming foo is a shadow fact, you could write (defrule foo-bar (foo (name ?name) (OBJECT ?fooBean)) => (call ?fooBean assign)) BTW - Just bind the LHS pattern to a variable to get a handle to that fact. ?fact <- (foo (name ?name)) Sorry for the spam code earlier. -JM Jason Morris Morris Technical Solutions [EMAIL PROTECTED] www.morristechnicalsolutions.com fax/phone: 503.692.1088 > -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]
RE: JESS: Getting a handle to the fact that matched given pattern
Oops... I may have misunderstood your question. Sorry... completely mixed up my code. Disregard that last suggestion. > -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]
RE: JESS: Getting a handle to the fact that matched given pattern
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]
Re: JESS: Getting a handle to the fact that matched given pattern
I think Amit Chopra wrote: [Charset iso-8859-1 unsupported, filtering to ASCII...] > > (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. OK, two things. First, to get a reference to the actual Fact object that matches any pattern in any rule, you simply bind that pattern to a variable in the rule left-hand-side using the "<-" operator: (defrule foo-res ?foo <- (foo (name ?x)) => ;; the variable ?foo is the matching jess.Fact object ... But second, as you say this is a shadow fact and you want to "call a method on it" I think what you mean is that you want to call a method on the object that's being shadowed. There's a reference to that object in the OBJECT slot of the shadow fact, so instead what you actually want to do is (defrule foo-res (foo (name ?x) (OBJECT ?foo)) => ;; the variable ?foo is the JavaBean and you can call "assign" - Ernest Friedman-Hill Science and Engineering PSEsPhone: (925) 294-2154 Sandia National LabsFAX: (925) 294-2234 PO Box 969, MS 9012 [EMAIL PROTECTED] Livermore, CA 94550 http://herzberg.ca.sandia.gov 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]