The "any" function is just like any other function taking an arbitrary list of 
arguments (including user-defined functions).  As such it parses with lower 
precedence than comparison operators -- so "eq" binds more tightly than "any".

Thus

   say so any <a b c> eq any <c d>;

parses like

   say(so(any(<a b c> eq any(<c d>))));

which is indeed False.

I'm not exactly sure what sort of warning should go here, or how it'd be 
detected.  But perhaps others have ideas.  

Pm


On Sun, Jun 21, 2020 at 07:00:23PM -0700, Joseph Brenner wrote:
> I was just playing around with junctions a bit today, and I
> noticed that if you weren't religious about using parenthesis
> with them you could get quietly tripped up:
> 
>     say so any(<a b c>) eq any(<c d>);   # True   (as expected)
>     say so any(<a b c>) eq any(<d e f>); # False  (as expected)
>     say so any <a b c> eq any <c d>;     # False    (something's wrong)
> 
> Basically, you need the parens on that first use of any.
> 
> Is there a reason you don't at least get a warning if you don't?

Reply via email to