thank you for your help,
I've implemented the 3rd, hereafter the solution (it might help new jess
users)
I'll think about the 2nd
(defquery all-interactions-of-query
(declare (variables ?query-name))
(Interaction (queries $?q&: (member$ ?query-name $?q))))
(defrule Compute-Queries-Weights2
(declare (no-loop TRUE))
?Q <-(Query (name ?Qname) (w-browsing ?Qwb) (w-shopping ?Qws)
(w-ordering ?Qwo))
=>
(bind ?interactions (run-query all-interactions-of-query ?Qname))
(while (?interactions hasNext)
(bind ?itoken (call ?interactions next))
(bind ?ifact (call ?itoken fact 1))
(bind ?iwb (fact-slot-value ?ifact w-browsing))
(bind ?iws (fact-slot-value ?ifact w-shopping))
(bind ?iwo (fact-slot-value ?ifact w-ordering))
(bind ?Qwb (+ ?Qwb ?iwb))
(bind ?Qws (+ ?Qws ?iws))
(bind ?Qwo (+ ?Qwo ?iwo))
)
(modify ?Q (w-browsing ?Qwb)(w-shopping ?Qws) (w-ordering ?Qwo))
)
Ernest Friedman-Hill wrote:
>
> There are many different ways you might do this. The classic (if
> ugly) solution would be to assert a fact like
>
> (done ?interation ?query)
>
> on the right hand side of this rule, and add a "not" condition for
> this fact to the left hand side of the rule; then remove the "no-
> loop" declaration. Then the rule would fire only once for each
> combination. This is what you usually do in CLIPS and CLIPS-like
> systems, but there are a couple of other solutions available in Jess.
>
> Another way would be to use Jess's "accumulate" conditional element;
> for each query, you could accumulate all the interactions, then do
> the modify on the rule right hand side. Make the rule a no-loop rule,
> and that would work fine. I guess the thing you'd accumulate should
> be a Jess list; that would make it relatively easy to increment the
> list elements, since you'll be summing up three numbers for the three
> slots that will be modified.
>
> A third way would be to use a defquery. Use a no-loop rule that
> simply matched each query, and then on the RHS of the rule invoke a
> defquery which matched all the interactions for that query. Iterate
> over them explicitly and then modify the query fact once at the end.
>
> On Dec 30, 2006, at 6:11 AM, rim wrote:
>
>>
>> Hi,
>> I need to write a rule which iterates on 2 sets of facts of different
>> templates,
>> below the code
>>
>> (defrule Compute-Queries-Weights
>> (declare (no-loop TRUE))
>> ?I <- (Interaction (name ?Iname) (queries $?Iqueries) (w-
>> browsing ?Iwb)
>> (w-shopping ?Iws) (w-ordering ?Iwo))
>> (test (<> (length$ $?Iqueries) 0))
>> ?Q <-(Query (name ?Qname) (w-browsing ?Qwb) (w-shopping ?Qws) (w-
>> ordering
>> ?Qwo))
>> (test (member$ ?Qname $?Iqueries))
>> =>
>> (printout t ?Iname " " ?Qname crlf)
>> (modify ?Q (w-browsing (+ ?Qwb ?Iwb)) (w-shopping (+ ?Qws ?Iws))
>> (w-ordering (+ ?Qwo ?Iwo)))
>> )
>>
>> the problem is the following,
>> without (declare (no-loop TRUE)) there'is a loop on one combination
>> and with (declare (no-loop TRUE)) once used a fact query is not
>> used again
>>
>> in the problem specification a fact 'query' belongs to many facts
>> 'intercation' and needs to be updated from all of them,
>> thanks and happy new year
>> --
>> View this message in context: http://www.nabble.com/iterations-
>> tf2898209.html#a8097199
>> 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 owner-jess-
>> [EMAIL PROTECTED]
>> --------------------------------------------------------------------
>
> ---------------------------------------------------------
> 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://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/iterations-tf2898209.html#a8114616
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]
--------------------------------------------------------------------