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: 

Here’s a relevant page from the Javadocs: 

From: owner-jess-us...@sandia.gov [mailto:owner-jess-us...@sandia.gov] 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


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 via email to