Hi,

I'm a bit new to Jess, but I already have lots of stuff working (thanks to
this thing being so easy!) and it's so much stuff that I am already needing
help on performance and design... :)

1. I have a very big graph of Java objects that I'm converting to JESS
facts.  But my approach is killing all my collections and using back
references in the pointed things.  For example if I have a class A with a
list of instances of B, in my facts I will have this:

(A (code 777) (...other slots...))
(B (code 778) (owner 777) (...other slots...))
(B (code 779) (owner 777) (...other slots...))

I think this is a good idea, but I could try to use the multislots too,
but would that be slower?

2. Is it a good idea to have those unique ID codes to do references between
things (I'm using deftemplates for all stuff).  My objects are a complex
graph and there's no way I can generate the facts using references for the
fact-IDs in a single pass; I would need to do some postprocessing in the
fact database in order to have that but it's an option.  Basically, I need
to have tons of pointers btw facts and I have forward references, cycles,
every damn thing.

3. I instinctively transformed my model in several ways while doing the
templates -- inlining the fields of small aggregate objects in their owners,
placing unique IDs everywhere, denormalizing structure, commenting out
unused slots, creating new templates to encode N-N relationships... except
for the template inheritance, isn't that surprisingly similar to good old
relational databases? :-)  This is not actually a question, just tell me if
I'm doing a very unholy and bad thing, as I'm totally fresh to CLIPS.

4. Now a really novice question.  How can I prevent things from being
detected lots of times.  I see that I can retract facts, but I don't want to
retract any fact because I'm using them to detect several things.  For
example I have this simple rule:

(defrule siblings "Finds sibling classes in the inheritance tree"
  (Generalization (parent ?parent-code) (child ?child-code-1))
  (Generalization (parent ?parent-code) (child ?child-code-2))
  (test (neq ?child-code-1 ?child-code-2))
  (Class (code ?child-code-1) (name ?child-name-1))
  (Class (code ?child-code-2) (name ?child-name-2))
  =>
  (printout t "Found siblings: " ?child-name-1 ", " ?child-name-2 crlf)
)

This code works, but it will detect twice all my sibling classes, e.g. if I
have A and B derived from the same base class, I'll get "Found siblings: A,
B" and also "Found siblings: B, A".  I fully understand why this happens,
but not how to prevent it :)

Thanks a lot!!  :)

----------------------------------------------------------------
*** The Free, Open and Pure Java Shell *** Current: Alpha6
http://www.geocities.com/ResearchTriangle/Node/2005/java_shell.htm
http://student.vub.ac.be/~opinalid/java_shell.htm
----------------------------------------------------------------
Osvaldo Pinali Doederlein [EMAIL PROTECTED]
MSc student, Developer, Java & CORBA evangelist, Rainmaker, etc.




---------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
in the BODY of a message to [EMAIL PROTECTED], NOT to the
list. List problems? Notify [EMAIL PROTECTED]
---------------------------------------------------------------------

Reply via email to