> "Abhijit A. Mahabal" <[EMAIL PROTECTED]> writes:
>
> > There is another problem beyond efficiency: the P6 list semantics is lazy.
> >
> > The following is valid P6, AFAIK:
> >
> > for 1 .. Inf {
> > print $_;
> > last when 10;
> > }
>
> Yeah, but that's a foreach loop, despite the fact that "foreach" is
> spelled "for" in your example. foreach loops have a different
> signature from for loops. (P6 does make it possible to have two
> routines with the same name that differ by signature, right? ISTR
> seeing something about that in one of the Apocalypses[1].)
Yes, it's possible to have two routines with the same name which
differ by signature... however, in Perl 6, C has only one
signature, and it's the one above. The C loop you are thinking
of is spelled C, and that's an obvious candidate for C, because it's so funky.
> > And then most of the proposed methods (including popping off [EMAIL PROTECTED])
> > would not work.
>
> foreach loops take their only code block in the braces; you don't have
> the code block inside the parens to worry about in that case, like you
> would in a for loop. Thus, foreach loops are no harder to implement
> than while or if, signature-wise.
To the contrary, C and C take only a single expression in
scalar context, whereas C takes a list in flattening list
context. This is the trouble, because you need flattening list
context followed by a different, C context. And that's not
allowed by A6 rules.
>
> > my_for 1 .. 5 { something }
> >
> > and not have to write:
> >
> > my_for 1 .. 5 {something };
>
> Ah, that's another matter, but you need that to implement while and if
> as well. Methinks that a signature should be able to call for a code
> block in braces, and when it's called the signature after that code
> block should be optional.
You mean s:2nd/signature/semicolon/ ?
> (And it needs to be optional whether the code block is the last
> thing in the signature or not; else, how would one implement map and
> grep and sort?)
Because commas are always optional around a code block, no matter
where it appears. This may well be generalized to semicolons, but
AFAIK, this is not the plan (yet).
> A question I haven't fully thought through: should a closing brace
> _ever_ need to be followed by a semicolon? Because, if not, then we
> could do this...
>
> my $foo = sub { do_stuff() } # <-- Note no semicolon..
> my $baz = {
>my @bar;
>more_stuff(@bar)
>yetmorestuff(@bar)
>[EMAIL PROTECTED] } # <-- Here also.
>
> Would that have any nasty consequences I haven't thought about?
This has already been discussed at length. The answer is "um". :-)
So far documented, the semicolon is only optional when the closing
brace is the only thing on the line. Don't worry, Larry's got a
handle on this one, and I don't think it needs further discussion.
[snip]
> Fooey, English is weird, let's stick with Perl.
>
> --
> $;=sub{$/};@;=map{my($a,$b)=($_,$;);$;=sub{$a.$b->()}}
> split//,"[EMAIL PROTECTED]/ --";$\=$ ;-> ();print$/
Hmm, that last quote seems a little odd when placed next to your
signature... :-)
Luke