On 9/28/05, Alan Moore <[EMAIL PROTECTED]> wrote: > Jerome, > I'm a little confused as to why your example below would work for either > set of facts.
Hey Jerome, Perhaps this generic example will be of some help.... Since you introduced the notion of sets, let's say that we have a set called A. For sake of argument, we'll add that set A has five properties. We'll call this set of properties X and we can write that: X = {x1, x2, x3, x4, x5} So, each element of A can be defined by the values of its five properties. If we represent elements of set A by ordered facts of type A, then we can write: (deftemplate A (slot x1) (slot x2) (slot x3) (slot x4) (slot x5)) Now, let's say that we want to find a subset, B, of all type A facts having certain property values. Note that we're not creating any new facts of type B. We are just extracting a subset from the collection of A facts. To do this, we simply restrict the slot values using Jess's constraints. For example, if you asked me to find subset B such that: x1 < 3 x2 > 2 x3 = x4 x5 = nil I could write: (defrule find-subset-B (A (x1 ?x1&:(< x1 3)) (x2 ?x2&:(> x2 2)) (x3 ?x3) (x4 ?x3) (x5 nil)) => ; Rule actions go here... ) This rule would fire on all facts of type A for which these constraints were satisfied. A complete program is given below. Cheers, -Jason ----------------------------------------------------- Morris Technical Solutions LLC www.morristechnicalsolutions.com [EMAIL PROTECTED] phone/fax: 503.692.1088 ;; ------------------------- ;; subset.clp ;; ------------------------- ; INIT (clear) (watch rules) (deftemplate A (slot x1) (slot x2) (slot x3) (slot x4) (slot x5)) ; Load some data (deffacts load-all-A-facts (A (x1 3) (x2 9) (x3 8) (x4 2) (x5 0.4)) (A (x1 -2) (x2 5) (x3 0.3) (x4 0.3) (x5 nil)) (A (x1 1) (x2 3) (x3 7) (x4 5) (x5 8)) (A (x1 3) (x2 5) (x3 9) (x4 1) (x5 nil)) (A (x1 9) (x2 3) (x3 8) (x4 4) (x5 5)) (A (x1 3) (x2 2) (x3 1) (x4 1) (x5 2)) (A (x1 1) (x2 5) (x3 4) (x4 4) (x5 nil)) (A (x1 0) (x2 4) (x3 4) (x4 1) (x5 3))) ; Filter set A for subset B (defrule find-subset-B ?fact<- (A (x1 ?x1&:(< ?x1 3)) (x2 ?x2&:(> ?x2 2)) (x3 ?x3) (x4 ?x3) (x5 nil)) => (printout t (fact-id ?fact) " matches!" crlf)) ; PROGRAM (reset) (run) ; OUTPUT ;Jess, the Rule Engine for the Java Platform ;Copyright (C) 2005 Sandia Corporation ;Jess Version 7.0b2 8/11/2005 ; ;FIRE 1 MAIN::find-subset-B f-7 ;<Fact-7> matches! ;FIRE 2 MAIN::find-subset-B f-2 ;<Fact-2> matches! -------------------------------------------------------------------- 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] --------------------------------------------------------------------