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: 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
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
assert
assert
modify ?f5 c (+ ?c 1)
modify ?f1 state "make_path"
The problem I’m encountering is the part of the “assert ”.
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