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
>>
you@...'
>> in the BODY of a message to
majordomo@..., NOT to the list
>> (use your own address!) List problems? Notify
owner-jess-users@...
>> .
>> --------------------------------------------------------------------
>
> ---------------------------------------------------------
> Ernest Friedman-Hill
> Informatics & Decision Sciences Phone: (925) 294-2154
> Sandia National Labs
> PO Box 969, MS 9012
ejfried@...
> Livermore, CA 94550
http://www.jessrules.com>
>
>
>
>
> --------------------------------------------------------------------
> To unsubscribe, send the words 'unsubscribe jess-users
you@...'
> in the BODY of a message to
majordomo@..., NOT to the list
> (use your own address!) List problems? Notify
owner-jess-users@....
> --------------------------------------------------------------------
>
>
>
--
View this message in context:
http://www.nabble.com/Re%3A-JESS%3A-getting-a-handle-on-fact-in-LHS-tp24253226p24270390.htmlSent from the Jess mailing list archive at Nabble.com.
--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users
you@...'
in the BODY of a message to
majordomo@..., NOT to the list
(use your own address!) List problems? Notify
owner-jess-users@....
--------------------------------------------------------------------