On Feb 15, 2008, at 9:28 AM, Henrique Lopes Cardoso wrote:

(defrule
    ?b1 <- (t1 (s ?s1))
    ?b2 <- (t2 (s ?s2))
    (or (test (eq ?s1 x)) (test (eq ?s2 x)))
    =>
    ...)

This example simplifies the general case. I may have any number of
bindings, and the common slot 's' is checked to see if at least one of
the bound facts has a certain x value. Is there a more efficient
way of
doing this? E.g. (member$ x (list ?b1 ?b2 ...)) ?


Efficient in terms of typing these out, or in terms of execution?
We're actually working on optimizing these kinds of things in the
network; by the final release of Jess 7.1, the above should actually
be equivalent to something like

(defrule
    (or (and ?b1 <- (t1 (s ?s1&x))
             ?b2 <- (t2 (s ?s2)))
        (and ?b1 <- (t1 (s ?s1))
             ?b2 <- (t2 (s ?s2&x))))
    ==>

which is extremely efficient. The above is the best way to write this
right now, but hopefully the two will soon be equivalent.





---------------------------------------------------------
Ernest Friedman-Hill
Informatics & Decision Sciences          Phone: (925) 294-2154
Sandia National Labs                FAX:   (925) 294-2234
PO Box 969, MS 9012                 [EMAIL PROTECTED]
Livermore, CA 94550                 http://www.jessrules.com

--------------------------------------------------------------------
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