Thank you for the quick answer. For the query, my problem was that the ?fact (from your example) would return <Java-Object:jess.Fact> and when I could get a handle on a fact in the CE of the LHS it would return <Fact-N> when i would compare these two even if the slot's were the same value, the compare would return false between the query result and the handle on the fact. I can't explicitly compare the slot values because I need the rule to be general. The option of having 2 rules seems to have done the job though, so thank you for that!!
monica Ernest Friedman-Hill wrote: > > Using a query to find the existing fact is one way to do it; if you're > not seeing the actual fact in the slot afterwards, it's probably just > a coding error in using the query interface. For a query like > > (defquery find-some-fact > (declare (variables ?a ?b)) > ?f <- (some-fact (a ?a) (b ?b))) > > Then you'd get the fact, if it exists, like > > (bind ?result (run-query* find-some-fact A B)) > (if (?result next) then > (bind ?fact (?result get ?f)) > else > (bind ?fact (assert (some-fact (a A) (b B))))) > > You could put all that into a deffunction so it wouldn't detract from > the flow of your other code. > > An alternative way to do all this would be to have two versions of the > original rule: one with a "not" pattern for the sub-fact and one with > a positive pattern. The "not" one should create the subfact, while the > other can directly use the matched fact. > > On Jun 29, 2009, at 7:12 AM, axelrad wrote: > >> >> Hello, >> >> I have a template that has a fact as a slot. >> >> ex) >> >> (deftemplate mainfact >> (slot subfact (type OBEJCT)) >> (slot index)) >> >> (deftemplate subfact >> (slot name) >> (slot content)) >> >> I have a rule that instantiates (assert) the mainfact and subfact if >> my >> condition is met. My problem is that if the subfact exists already >> it gets >> asserted to false. What I need is to get a handle on the fact if it >> exists >> and assert the mainfact with the existing subfact and a new current >> index. >> What I do now is along the lines of: >> >> assert mainfact (subfact xxx) (index n) >> >> works great if the subfact doesn't exist yet: mainfact xxx n >> but if the subfact exists my result is: mainfact (false) (n) >> >> what i need is : mainfact (existing fact) (n) >> >> I need to compare the subfacts for when they are the same and keep >> the one >> with the higher index value. I've tried doing a query and putting >> that value >> in but i get a jess query object instead of a fact object, and later >> when i >> need to compare the values they are not considered the same object, >> even if >> the slot values are correct, so I don't get the correct results when >> trying >> to keep the mainfact with higher index value. >> >> I can test if the fact exists already, but how can I get a handle on >> it to >> place that value in the slot? >> >> Thanks in advance for any help! >> >> Monica >> -- >> View this message in context: >> http://www.nabble.com/getting-a-handle-on-fact-in-LHS-tp24252267p24252267.html >> Sent from the Jess mailing list archive at Nabble.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] >> . >> -------------------------------------------------------------------- > > --------------------------------------------------------- > Ernest Friedman-Hill > Informatics & Decision Sciences Phone: (925) 294-2154 > Sandia National Labs > 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]. > -------------------------------------------------------------------- > > > -- View this message in context: http://www.nabble.com/Re%3A-JESS%3A-getting-a-handle-on-fact-in-LHS-tp24253226p24270390.html Sent from the Jess mailing list archive at Nabble.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]. --------------------------------------------------------------------
