JESS: [EXTERNAL] Nested not/and syntax question

2012-01-06 Thread Theodore Patkos

Hello everyone and best wishes for the new year

could someone please give me an explanation why the following two rules 
behave in a different way, although they express the same logical 
formula (i.e., not (Object ^ Pred) )? In fact, only the second rule 
reaches correct conclusions, as I note below.


(defrule Rule1
(not
   (and
  ?o - (Object (name B))
  (Pred (obj ?o))
))
=
(printout t OK1 crlf)
)


(defrule Rule2
(or
   (not (Object (name B)))
   (and
  ?o - (Object (name B))
  (not (Pred (obj ?o)))
))
=
(printout t OK2 crlf)
)

The definition of facts could be like:
(deftemplate Object (slot name))
(assert (Object (name A)))
(assert (Object (name B)))
(deftemplate Pred (slot obj))

where obj is the id of some Object fact, eg.

(defrule Rule
(declare (salience 10))
?o - (Object (name A))
=
(assert (Pred (obj ?o)))
)


What I notice is that Rule1 behaves erroneously when the Object fact 
exists in the KB, but not the Pred fact: although it is supposed to be 
triggered, it is not! Rule2, on the other hand, behaves correctly all 
the times.


When both Object and Pred facts exist or when the Object does not exist, 
both rules behave fine.


So, what is wrong with the syntax of the first rule? No variable 
definition is used outside the not pattern..


Thanks

Theodore



To unsubscribe, send the words 'unsubscribe jess-users y...@address.com'
in the BODY of a message to majord...@sandia.gov, NOT to the list
(use your own address!) List problems? Notify owner-jess-us...@sandia.gov.




Re: JESS: Creating identical independent engines in Java

2011-05-09 Thread Theodore Patkos
Right, thank you for your answer, it seems to accurately capture the 
solution needed. What I still can’t figure out is how to preserve the 
connection to the shadow facts.


When I created different peers, instead of copying the shadow facts I 
asserted them the same way they were asserted in the original engine. 
This way, whatever change occurred in a shadow fact instance, it was 
seen by all peers.


This is not the case with the engine that is populated with 
Rete.bload(). I studied the “JESS: Problems with copying shadow facts 
via bsave and bload” thread, but I can’t see how to re-register the 
listeners.. Any suggestions there?


Regards,

Theodore



Στις 8/5/2011 3:44 μμ, ο/η Ernest Friedman-Hill έγραψε:
You can use Rete.bsave() to write a copy of an engine to a stream, and 
then use Rete.bload() on a new instance of jess.Rete to turn it into a 
copy of the original.


On May 7, 2011, at 4:04 PM, Theodore Patkos wrote:


Hey all,

I was wondering if there is a way to make an exact, yet independent, 
copy of a Rete engine's instance in Java (i.e., including the 
ruleset, working memory, agenda, activation order etc).


Peering an engine only copies the ruleset; if, afterwards, one 
attempts to copy each fact from the initial engine to the peer, apart 
from matters of efficiency, there exists the possibility of 
activating rules that have already been activated in the initial 
engine before the peering.


Thanx!
Theodore



To unsubscribe, send the words 'unsubscribe jess-users y...@address.com'
in the BODY of a message to majord...@sandia.gov, NOT to the list
(use your own address!) List problems? Notify 
owner-jess-us...@sandia.gov.




-
Ernest Friedman-Hill
Informatics  Decision Sciences, Sandia National Laboratories
PO Box 969, MS 9012, Livermore, CA 94550
http://www.jessrules.com








To unsubscribe, send the words 'unsubscribe jess-users y...@address.com'
in the BODY of a message to majord...@sandia.gov, NOT to the list
(use your own address!) List problems? Notify 
owner-jess-us...@sandia.gov.










To unsubscribe, send the words 'unsubscribe jess-users y...@address.com'
in the BODY of a message to majord...@sandia.gov, NOT to the list
(use your own address!) List problems? Notify owner-jess-us...@sandia.gov.