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].
--------------------------------------------------------------------