Hi, Juerd wrote: > Will Perl 6 support mutable for-reverse?
I'd like it! :) > Some possible answers that I could think of: > > (a) Yes, but as a special case > (b) Yes, because reverse returns lvalue aliases > (c) No > > But there's another one, that I didn't immediately think of: > > (d) Yes, because reverse @foo always behaves like an array (rather > than a function that *returns* a list), just with a different view: > the elements are in the wrong order. Where is the difference (for the user) between a subroutine which returns an appropriate proxy object and an array? # Perl 5 sub foo {...} foo[42]; # really foo([42]) # Perl 6 sub foo {...} foo[42]; # really (foo())[42] foo{"Pugs"}; # really (foo()){"Pugs"} foo<Pugs>; # really (foo()){"Pugs"} > This option d is interesting, and would probably be nice to have, > because it would also allow this (contrived and useless) kind of > thing: > > push reverse(@foo), $bar; > > And while that isn't very interesting, I think something like > > my @bar := reverse @foo; > > would be very useful. Yep :) (Also note that if we make &reverse return an appropriate proxy object so this example works, for reverse @array {...} will automatically be optimized.) > The same thing would be interesting for zip: > > my @xyzzy := @foo Y @bar; > > Assuming this results in an even number of elements in @xyzzy, pushing > a single element onto @xyzzy could result in an element added to @foo > every odd, and to @bar every even time. > > Would something like that be possible? Wanted? I'd like that as well. (Generally, I'd like to see many lvalue subs and methods in default Perl 6.) > Not too costly? I think it'd even optimize many cases: for @foo ¥ @bar {...} # Generating a new array containing @foo ¥ @bar is, thanks to # zip's laziness, unnecessary. (BTW, IIUC, per r6622 of S06.pod [1] &zip returns an array of arrayrefs now: for zip('a'...; 0...; @foo) -> [$a, $i, $x] { ...} (Or does for no longer automatically take as much elements from the input array as needed? I.e. does my @array = <a b c d>; for @array -> $a, $b { say "$a $b" } no longer output "a b\nc d\n", but die?)) --Ingo [1] http://svn.perl.org/perl6/doc/trunk/design/syn/S06.pod --Ingo