Yep, that works too, of course.  And it is the preferred way of doing it.
My bad.

On Nov 14, 2007 1:23 PM, Robert Kirby <[EMAIL PROTECTED]> wrote:

>  How about
>
> (defrule find_it2
>    (things (Id ?pId)(elements $? ?elementName $?))
>    (otherthing (one_Element ?elementName))
>    =>
>    (printout t "found it:" ?pId crlf))
>
> which is described at the end of *6.4. Matching in Multislots* 
> <http://herzberg.ca.sandia.gov/jess/docs/70/rules.html#multimatch>?
>
> Bob Kirby
>
>
> At 09:15 AM 11/14/2007, Jason Morris wrote:
>
> Hi Hans,
>
> Try this solution:
>
> (clear)
> (watch all)
>
> (deftemplate things
>    (slot Id)
>    (multislot elements))
> (deftemplate otherthing
>      (slot one_Element))
>
> (deffacts init
>     (things (Id 1) (elements a b c))
>     (otherthing (one_Element a)))
>
> ;Get all Ids of things
> ;Where AElement of elements equals one_Element
>
> (defrule find_it
>    (things (Id ?pId)(elements $?elements))
>    (otherthing (one_Element ?foo&:(member$ ?foo ?elements)))
>  =>
>    (printout t crlf "Found it: " ?pId crlf crlf))
>
> ; Program
> (reset)
> (run)
>
> /** OUTPUT
> MAIN::find_it: +1+1+1+1+2+t
>  ==> Focus MAIN
>  ==> f-0 (MAIN::initial-fact)
>  ==> f-1 (MAIN::things (Id 1) (elements a b c))
>  ==> f-2 (MAIN::otherthing (one_Element a))
> ==> Activation: MAIN::find_it :  f-1, f-2
> FIRE 1 MAIN::find_it f-1, f-2
>
> Found it: 1
>
>  <== Focus MAIN
> **/
>
> Cheers,
> Jason
>
> -----------------------------------------------------------
> Jason Morris
> Morris Technical Solutions LLC
>  http://www.morris-technical-solutions.com
>
> On Nov 14, 2007 10:43 AM, sotski <[EMAIL PROTECTED]> wrote:
>
> Hey all!
> I have a newbie question. I read the Answers to the "matching in two
> multislots of two different templates" post.
> I have very similiar problem but not the same ;-) I simplify the problem
> for
> you:
> ;;Templates:
> (deftemplate things
>    (slot Id)
>    (multislot elements))
> (deftemplate otherthing
>      (slot one_Element))
>
> now I want to write a rule which does the following:
>
> get all Ids of things
> where AElement of elements equals one_Element
>
> I wrote a rule:
>
> (defrule find_it
>    (things (Id ?pId)(elements $?elementName))
>    (otherthing (one_Element ?foo))
>    (test (eq ($?elementName ?foo))
>  =>
>    (printout t "found it:" ?pId crlf))
>
> But it doesen't fire.
> I assert facts from java and they are of type RU.SYMBOL
>
> Thx for your help
> Bye
> Hans
> --
> View this message in context:
> http://www.nabble.com/matching-problem-tf4805951.html#a13749159
> 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]
> --------------------------------------------------------------------
>
>
>
>
>


-- 
-----------------------------------------------------------
Jason Morris
Morris Technical Solutions LLC
http://www.morris-technical-solutions.com

Reply via email to