On Thu, Jul 22, 2010 at 1:13 PM, Jon Lang <datawea...@gmail.com> wrote:

> > I also think it's doable without a special tool:
> >
> >  0, { state $i = 1; $^a + $i++ } ... *
>
> Kludgey; but possibly doable.
>

Well, it's kind of what state is there for.


>
> But what I'd really like to see would be for the index to be passed
> into the step function via a named parameter.


Of course, you say "the index" as if there is such a thing. In reality,
there's no reason for the series operator to keep an index unless it's
explicitly being indexed (e.g. by postcircumfix:<[]>)


>  Yes, it would be a
> special tool; but it would be much more in keeping with the "keep
> simple things easy" philosophy that Perl 6 tends to promote:
>
>    0, { $^a + $:i } ... * # series of triangle numbers
>    0, { $^a + (2 * $:i - 1)  } ... * # series of square numbers
>    { $:i ** 2 } ... * # series of square numbers
>    1, { $^a * $:i } ... * # series of factorials


I do have to admit that that's awfully clean-looking, but the implementation
would force a closure in a series to behave differently from a closure
anywhere else.

Without changing closure definitions and without extending the syntax any,
you could make the series operator do a little bit more introspection work
and if a parameter is named "index", track an index value and pass it by
name, passing any remaining parameters positionally from the previous n
values as normal.

That makes your examples:

 0, { $^a + $^index } ... *
 0, { $^a + (2 * $^index - 1)  } ... *
 { $^index ** 2 } ... *
 1, { $^a * $^index } ... *

Not changing the syntax of closures seems like a reasonable goal at this
late stage.

   --
Aaron Sherman
Email or GTalk: a...@ajs.com
http://www.ajs.com/~ajs

Reply via email to