Hmm, this would suggest that in P6 the comment that "unlike ++, the -- operator is not magical" should no longer apply.
On Fri, Sep 03, 2004 at 08:09:23AM -0400, Joe Gottman wrote: > > > > -----Original Message----- > > From: Larry Wall [mailto:[EMAIL PROTECTED] > > Sent: Thursday, September 02, 2004 8:41 PM > > To: Perl6 > > Subject: Re: Reverse .. operator > > > > On Thu, Sep 02, 2004 at 08:34:22PM -0400, Joe Gottman wrote: > > : Is there similar shorthand to set @foo = (5, 3, 3, 2, 1) ? I know you > > can > > : go > > : > > : @foo = reverse (1 ..5); > > : > > : but this has the major disadvantage that it cannot be evaluated lazily; > > : reverse has to see the entire list before it can emit the first element > > of > > : the reversed list. > > > > I don't see any reason why it can't be evaluated lazily. The .. produces > > a range object that gets shoved into the lazy list that gets bound to > > the slurp array of reverse(). If you pop that, there's no reason it > > couldn't go out and ask the end of the lazy list for its last element. > > Just have to make .. objects smart enough to deal off either end of > > the deck. > > I get it. One way to implement this would to give the .. object a > .reverse member iterator that lazily iterates from right to left, and have > the reverse subroutine call the .reverse member on the list that was passed > to it (if this member exists). The advantage of this is that it can be > extended for other types, or even to arrays returned from functions. For > instance, > > multi sub grep(Code $f, [EMAIL PROTECTED] does reverse) returns (Array does > reverse {grep $f, @array.reverse;}) #reverse input > > multi sub map(Code $f, [EMAIL PROTECTED] does reverse) returns (Array does reverse > {map {reverse $f($_)} @array.reverse;}) #reverse input and result of each > call to $f > > If it isn't possible to overload a multi sub on a .does property, we can > achieve the same effect by creating a ReversableArray class that inherits > from Array and overloading on that. > > Joe Gottman > > > --