Thanks for your help. I think this solves the problem:

(defrule propagate-back
 (forall (depends-on (parent ?x)(children ? ?n ?))
        (available-part (name ?n)))
 =>
 (assert (available-part (name ?x)))
)

The problem was that I did not know about the "forall" conditional element,
which was introduced in the later than many other constructs.

Best regards,


On Tue, Jul 28, 2009 at 7:44 PM, Ernest Friedman-Hill <[email protected]>wrote:

> I think you can replace all occurrences of "id" with "parent", removing the
> redundant "parent" reference in the first fact.
>
>
>
> On Jul 28, 2009, at 1:35 PM, Wolfgang Laun wrote:
>
>  Sorry, where I have "name" in depends-on, that was meant to be your slot
>> "children".
>>
>> As for the id slot I added: I don't think it can be done without. It just
>> should be a unique identifier.
>> It serves the same or similar purpose in Ernest's solution, to freeze the
>> forall iteration to the children list elements of a *single* depends-on
>> fact, i.e., the one matched in the initial CE.
>>
>> -W
>>
>>
>>
>> On Tue, Jul 28, 2009 at 5:31 PM, levent kent <[email protected]> wrote:
>> Thanks again, but I didn't get it. I don't have any slot named "id" or
>> "name".
>> Idefined my templates as follows.
>>
>> (deftemplate depends-on (slot parent) (multislot children))
>> (deftemplate available-part (slot name))
>>
>> Here, depends-on relation specifies which parent task depends on the
>> subtaks given in the multislot named "children".
>>
>> To complete a "parent task", one should first complete the subtasks. I a
>> task ?x is to be completed, the system adds (available-part (name ?x)) to
>> the working memory. So, I need to check if all subtasks of a parent task ?p
>> are "available-part" or not to insert (availabl-part (name ?p)) to WM.
>>
>> I hope it is not difficult ot rewrite your query.
>>
>> Thanks
>>
>>
>>
>> On Tue, Jul 28, 2009 at 5:16 PM, Ernest Friedman-Hill <[email protected]>
>> wrote:
>> This is the right solution; it could be simplified a little using the
>> "forall" conditional element, which would make this closer to the spirit of
>> the Levent's original:
>>
>>
>> (defrule every-subtask
>>  (depends-on (id ?x)(parent ?a))
>>  (forall (depends-on (id ?x)(name ? ?n ?))
>>
>>         (available-part (name ?n)))
>>  =>
>>  (assert (available-part (name ?a)))
>> )
>>
>>
>>
>>
>> On Jul 28, 2009, at 10:53 AM, Wolfgang Laun wrote:
>>
>> It would be easier to detect a depends-on where the available-part would
>> be missing for one of its name list elements.
>>
>> As it stands now, you'll need an identifier for depends-on so that the
>> binding into the not (via ?x) is possible.
>>
>> (defrule every-subtask
>>  (depends-on (id ?x)(parent ?a))
>>  (not (and (depends-on (id ?x)(name ? ?n ?))
>>           (not (available-part (name ?n)))))
>>  =>
>>  (assert (available-part (name ?a)))
>> )
>>
>> -W
>>
>>
>> On Tue, Jul 28, 2009 at 2:47 PM, levent kent <[email protected]> wrote:
>> Hi  everybody,
>>
>> I am doing my masters thesis and have a problem with lists.
>> It is actually very simple.
>>
>> I want to create a rule which says:
>> If all subtasks of a parent task are completed, then the parent task can
>> be completed too.
>>
>> I tried the code below, but it seems that I can not use "foreach" at LHS
>> of a rule.
>>
>> (defrule BuildPlanForward
>>   (depends-on (parent ?a) (children ?list))
>>   (foreach ?c ?list  (available-part (name ?c)))
>>   =>
>>   (assert (available-part (name ?a)))
>>   )
>>
>> How could I write such a rule in Jess?
>>
>> Thanks,
>>
>> --
>> Levent Kent
>>
>>
>> ---------------------------------------------------------
>> 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]
>> .
>> --------------------------------------------------------------------
>>
>>
>>
>>
>> --
>> Levent Kent
>>
>>
> ---------------------------------------------------------
> Ernest Friedman-Hill
> Informatics & Decision Sciences, Sandia National Laboratories
> PO Box 969, MS 9012, 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].
> --------------------------------------------------------------------
>
>


--
Levent Kent

Reply via email to