[rules-users] forall/from/eval/contains: odd DRL syntax error

Greg Barton greg_barton at yahoo.com
Wed Sep 2 13:17:22 EDT 2009


Certainly.  And while containsAll may work, mattering the size and nature of the collections involved (linear vs constant time existence check)  it might not perform as well as your first solution.

--- On Wed, 9/2/09, Wolfgang Laun <wolfgang.laun at gmail.com> wrote:

> From: Wolfgang Laun <wolfgang.laun at gmail.com>
> Subject: Re: [rules-users] forall/from/eval/contains: odd DRL syntax error
> To: "Rules Users List" <rules-users at lists.jboss.org>
> Date: Wednesday, September 2, 2009, 11:54 AM
> Certainly, and it's more to the point -
> thank you!
> 
> Nevertheless, the compiler hiccup ought to be investigated
> -W
> 
> 
> On Wed, Sep 2, 2009 at 5:31 PM,
> Greg Barton <greg_barton at yahoo.com>
> wrote:
> 
> Is Collection.containsAll() an
> option?
> 
> 
> 
> --- On Wed, 9/2/09, Wolfgang Laun <wolfgang.laun at gmail.com>
> wrote:
> 
> 
> 
> > From: Wolfgang Laun <wolfgang.laun at gmail.com>
> 
> > Subject: [rules-users] forall/from/eval/contains: odd
> DRL syntax error
> 
> > To: "Rules Users List" <rules-users at lists.jboss.org>
> 
> > Date: Wednesday, September 2, 2009, 9:58 AM
> 
> > A rule has to
> ascertain that all elements in
> 
> > a List<ElemBoxStatus>in a
> 
> > Collector occur in the matching BoxResponse's 
> 
> > Set<ElemBoxStatus>. There is
> 
> > just one BoxResponse per Collector.
> 
> >
> 
> > This here works fine:
> 
> >
> 
> >
> 
> > rule matchCollectorResponse
> 
> >  when
> 
> >         $c : Collector( $ebsList :
> 
> > elemBoxStatusList, $gsSet : globalStatusSet )
> 
> >         $b : BoxResponse( collector == $c,
> 
> > globalStatusSet == $gsSet, $ebsSet :
> elemBoxStatusSet  )
> 
> >
> 
> >         forall( $ebs : ElemBoxStatus() from
> 
> > $ebsList
> 
> >                 BoxResponse( collector
> ==
> 
> > $c, elemBoxStatusSet contains $ebs ) )
> 
> >     then
> 
> > ...
> 
> > end
> 
> >
> 
> > Thinking that $ebs is already available from the
> second
> 
> > pattern ($b:...), I tried
> 
> >
> 
> >
> 
> > rule matchCollectorResponse
> 
> >     when
> 
> >         $c : Collector( $ms : message, $ebsList
> :
> 
> > elemBoxStatusList, $gsSet : globalStatusSet )
> 
> >         $b : BoxResponse( collector == $c,
> 
> > globalStatusSet == $gsSet, $ebsSet :
> elemBoxStatusSet  )
> 
> >
> 
> >         forall( $ebs : ElemBoxStatus() from
> 
> > $ebsList
> 
> >                    eval(
> $ebsSet.contains(
> 
> > $ebs ) ) )
> 
> >     then
> 
> > ...
> 
> > end
> 
> >
> 
> > but the compiler came back with
> 
> >
> 
> > Line ...:55 no viable alternative at input
> '$ebs'
> 
> > in rule matchCollectorResponse in pattern eval
> 
> >
> 
> >
> 
> > Defining a suitable function isIn(...) and using this
> 
> > within eval() produces the same result. This
> 
> > and other experiments seems to indicate that bindings
> in
> 
> > the first pattern of forall() are not
> 
> > passed in to an eval() later in the forall.
> 
> >
> 
> >
> 
> > JIRA?
> 
> >
> 
> > -W
> 
> >
> 
> >
> 
> >
> 
> > -----Inline Attachment Follows-----
> 
> >
> 
> > _______________________________________________
> 
> > rules-users mailing list
> 
> > rules-users at lists.jboss.org
> 
> > https://lists.jboss.org/mailman/listinfo/rules-users
> 
> >
> 
> 
> 
> 
> 
> 
> 
> 
> 
> _______________________________________________
> 
> rules-users mailing list
> 
> rules-users at lists.jboss.org
> 
> https://lists.jboss.org/mailman/listinfo/rules-users
> 
> 
> 
> 
> -----Inline Attachment Follows-----
> 
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
> 


      




More information about the rules-users mailing list