I think Dave Tapley wrote:
> ----------------------------------------
> Is this a known issue or am I over looking something here?
> I just don't see how the (test) can return TRUE and the rule not fire.

Pattern-matching is driven by working memory modifications (assert,
retract, modify) and proceeds from the top down in any one rule. A
"test" CE is evaluated only when the preceding pattern is
matched. Therefore the test in your oneSmall rule will be evaluated
only when a Cell fact is or asserted/modified. Presumably the Small
facts are all asserted after all the Cell facts, so at the time the
test is evaluated, there *are* no Small facts in working memory.

Using test to run a query is a sort of end run around the normal
pattern-matching process; there are better ways to write this so that
you get the answer you want. One would be like this:

 (defrule oneSmall-good
     ;; There is a cell
     (Cell (r ?r) (c ?c))

     ;; With a small value
     (Small (r ?r) (c ?c) (v ?v))
     
     ;; And no other different small value
     (not (Small (r ?r) (c ?c) (v ~?v)))
     =>
     (printout t ?r"x"?c " has 1 small number: " ?v crlf)

You could also use "accumulate" to count the Small facts and match the
count; that would be convenient if you wanted to have exactly 27
matches, for example. But using a query on a rule LHS should be an
absolute last resort.

---------------------------------------------------------
Ernest Friedman-Hill  
Advanced Software Research          Phone: (925) 294-2154
Sandia National Labs                FAX:   (925) 294-2234
PO Box 969, MS 9012                 [EMAIL PROTECTED]
Livermore, CA 94550         http://herzberg.ca.sandia.gov

--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
in the BODY of a message to [EMAIL PROTECTED], NOT to the list
(use your own address!) List problems? Notify [EMAIL PROTECTED]
--------------------------------------------------------------------

Reply via email to