JESS: [EXTERNAL] Linking rule actions to the execution of other rules

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

JESS: [EXTERNAL] Linking rule actions to the execution of other rules

Tom De Costere
Hello,
 
I’m currenly trying to link the actions of rules to the possible execution of other rules.
Now I was wondering if anybody has any ideas how this can be done?
 
I’ve already succeeded in reading out the actions and the conditions, but when looking at the current results I can only see the following thing:  (piece of output of the loaded miss manners benchmark)
 
- Rule: MAIN::continue
- Number of conditions [1]:
-- MAIN::Context
- Number of actions [1]:
modify ?f1 state "assign_seats"
 
- Rule: MAIN::find_Seating
- Number of conditions [7]:
-- MAIN::Context
-- MAIN::Seating
-- MAIN::Guest
-- MAIN::Guest
-- MAIN::Count
-- not
-- not
- Number of actions [5]:
assert <Fact--1>
assert <Fact--1>
assert <Fact--1>
modify ?f5 c (+ ?c 1)
modify ?f1 state "make_path"
 
The problem I’m encountering is the part of the “assert <Fact—1>”.
 
Does anybody know how to extract the exact fact it’s going to produce + how I could possible find out what rules can be executed after the actions of a rule have been executed?
 
Thanks in advance
 
Tom DC
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

RE: JESS: [EXTERNAL] Linking rule actions to the execution of other rules

Friedman-Hill, Ernest

Hi Tom,

 

What you’re asking is basically an example of the famous Halting Problem in computer science, which I can paraphrase as “determining what a program is going to do without running the program.” You can’t tell what rules a fact could activate without doing all the pattern matching that Jess does, and unless you write something as complex as Jess, you will do it more slowly than Jess would.

 

That said, the best way to determine what rules can fire as a result of a fact assertion would be to use Jess itself to find out. Add a JessEventListener that listens for ACTIVATION events, and then whenever you assert a fact, watch and see what events you get back. Each combination of rule/fact-tuple that could be fired as a result of the assertion will generate one event, so you may get many.

 

Here is some documentation on JessEvents: http://www.jessrules.com/jess/docs/71/library.html#events

 

Here’s a relevant page from the Javadocs: http://www.jessrules.com/jess/docs/71/api/jess/JessEvent.html

 

 

From: [hidden email] [mailto:[hidden email]] On Behalf Of Tom De Costere
Sent: Tuesday, April 23, 2013 5:08 PM
To: jess-users
Subject: JESS: [EXTERNAL] Linking rule actions to the execution of other rules

 

Hello,

 

I’m currenly trying to link the actions of rules to the possible execution of other rules.

Now I was wondering if anybody has any ideas how this can be done?

 

I’ve already succeeded in reading out the actions and the conditions, but when looking at the current results I can only see the following thing:  (piece of output of the loaded miss manners benchmark)

 

- Rule: MAIN::continue

- Number of conditions [1]:

-- MAIN::Context

- Number of actions [1]:

modify ?f1 state "assign_seats"

 

- Rule: MAIN::find_Seating

- Number of conditions [7]:

-- MAIN::Context

-- MAIN::Seating

-- MAIN::Guest

-- MAIN::Guest

-- MAIN::Count

-- not

-- not

- Number of actions [5]:

assert <Fact--1>

assert <Fact--1>

assert <Fact--1>

modify ?f5 c (+ ?c 1)

modify ?f1 state "make_path"

 

The problem I’m encountering is the part of the “assert <Fact—1>”.

 

Does anybody know how to extract the exact fact it’s going to produce + how I could possible find out what rules can be executed after the actions of a rule have been executed?

 

Thanks in advance

 

Tom DC

Loading...