On Fri, Jul 08, 2005 at 03:17:42PM -0400, Chip Salzenberg wrote:
: Larry on p6i?  I didn't expect some kind of Perlish Exposition!

Hey, I'm the chief Lurky Turkey around here...

: Incidentally, under the "appropriate amount of fun" topic: An
: interesting Parrot/Perl6 intersection problem with named parameters
: is the representation of <==.  Given
: 
:     foo('a' => 1) <== ('b' => 2, ...)
: 
: It's necessary to _somehow_ pass the first pair distinctly from the
: second pair without knowing the _name_ of the user-declared slurpy
: parameter of &foo.  I suppose the Perl 6 compiler will have to settle
: on a pseudo-parameter-name that will be used to represent a <== style
: list.  Assuming that name is '_', the above call could be compiled to:
: 
:     foo('a' => 1, '_' => ('b' => 2, ...))
: 
: or something similar.  It would then be the responsibility of a Perl 6
: function preamble to bind the contents of the '_' argument, if any, to
: the user-declared slurpy parameter, if any.  Non-Perl6 functions would
: perhaps see the '_' parameter and have to deal with it.

Yes, that should work, though in fact the Perl 6 binder has to do
more work even than that, since once it sees the _ parameter, it has
to decide whether it's binding multiple pipes or semicolons, and if
so, whether the target slurpy type wants to treat the pipe/semicolon
boundaries multidimensionally or as a flat list.  To a non-Perl 6
function it would appear to be a list of lazy lists, but Perl 6 is
trying to keep semicolons from becoming accidental sublist builders
*except* in contexts that are expecting multiple sublists (such
as subscripts that are lists of slices, or zip-like operators that
are processing multiple lists in parallel).  Accidental semicolons
tend to happen at the ends of lists, and it's really antisocial to
retroactively wrap a [...] around the entire list merely because of
a trailing semicolon.

Plus it settles the whole issue of what to do with multiple pipes into
the same function.  But I don't think Parrot has to worry about that,
as long as Perl 6 can hook the binding of the slurpy sufficiently well
to think about it.

Larry

Reply via email to