Skip Menu |
Report information
Id: 126522
Status: resolved
Priority: 0/
Queue: perl6

Owner: Nobody
Requestors: smls75 [at] gmail.com
Cc:
AdminCc:

Severity: (no value)
Tag: (no value)
Platform: (no value)
Patch Status: (no value)
VM: (no value)



Subject: The X and Z metaops don't respect Scalar containers as part of the 'single argument rule'
Download (untitled) / with headers
text/plain 897b
S07 [https://github.com/perl6/specs/blob/master/S07-lists.pod] claims: "The single argument rule does respect Scalar containers." "The single argument rule is implemented consistently throughout the language." It lists 'for', '.push', 'infix:<,>' and 'postcircumfix:<[ ]>' as examples of things that consistently follow the rule. Since it does not explicitly mention the X and Z meta-operators as exceptions, it stands to reason that they too should follow this rule. But in current Rakudo they only follow it partially: They treat each operand as a single argument whose elements to act on, but they do *not* respect Scalar-containerization of said arguments. Example: say $(1, 2) X <a b c> Output: ((1 a) (1 b) (1 c) (2 a) (2 b) (2 c)) Expected output: (((1 2) a) ((1 2) b) ((1 2) c)) TL;DR: This is either a Rakudo bug, or a case where S07 needs more clarification.
RT-Send-CC: perl6-compiler [...] perl.org
Download (untitled) / with headers
text/plain 1.1k
On Sat Oct 31 14:12:36 2015, smls75@gmail.com wrote: Show quoted text
> S07 [https://github.com/perl6/specs/blob/master/S07-lists.pod] claims: > > "The single argument rule does respect Scalar containers." > "The single argument rule is implemented consistently throughout the > language." > > It lists 'for', '.push', 'infix:<,>' and 'postcircumfix:<[ ]>' as > examples of > things that consistently follow the rule. > > Since it does not explicitly mention the X and Z meta-operators as > exceptions, > it stands to reason that they too should follow this rule. > > But in current Rakudo they only follow it partially: They treat each > operand as > a single argument whose elements to act on, but they do *not* respect > Scalar-containerization of said arguments. > > Example: > > say $(1, 2) X <a b c> > > Output: > > ((1 a) (1 b) (1 c) (2 a) (2 b) (2 c)) > > Expected output: > > (((1 2) a) ((1 2) b) ((1 2) c)) > > > TL;DR: This is either a Rakudo bug, or a case where S07 needs more > clarification.
Rakudo bug, and fixed now. Also roundrobin was vulnerable to a similar problem, and has also been fixed. Tests in S03-metaops/cross.t, S03-metaops/zip.t, and S32-container/roundrobin.t.


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at perl.org