On Sat, Dec 04, 2004 at 01:11:30AM +0100, Juerd wrote:
: What happens to the flip flop operator? Will .. in scalar context remain
: the same?

I don't think so.  It's definitely a candidate for a longer
Huffmanization simply in terms of frequency of use.  On top of which,
almost no Perl 5 programmers even know what it does.  Plus it's
basically opaque state in the pad.  Not that opaque is bad when you
want the abstraction, but I would characterize the state of scalar ..
as almost "sneaky" state.

Plus we have the problem that we don't have a $. variable anymore,
nor really the concept of "last input handle".  I expect the p5-to-p6
translator will have to detect any references to $. and set some
kind of global $*LASTIN handle on input, and define &p5dot to
be $*LASTIN.chunknum or some such.  Then the flip flop might be done with
a real state variable.

So Perl 5's

    if (1..10) {...}

could look something like this:

    if flipflop(state $x, { p5dot() == 1 }, { p5dot() == 10 }) {...}

Pity it clobbers the current lexical scope with the name $x.  Now we
see that it'd be cool to have an anonymous state variable somehow:

    if flipflop(state, { p5dot() == 1 }, { p5dot() == 10 }) {...}

That would let us have a state variable that is attached to our scope but
that is nevertheless only named within the flipflop function.

Of course, if flipflop were a macro, that could easily be reduced to

    if flipflop(p5dot() == 1, p5dot() == 10) {...}

or even, if you get fancy with the macro:

    if flipflop 1, 10 {...}

But then we lose the flexibility of writing any of:

    if flipflop(state, { p5dot() == 1 }, { p5dot() == 10 }) {...}
    if flipflop(my, { p5dot() == 1 }, { p5dot() == 10 }) {...}
    if flipflop(our, { p5dot() == 1 }, { p5dot() == 10 }) {...}

to control when the state gets reset, or who can reset it.  So I'd
guess there's a &*flipflop builtin function, and we let people define
a macro if they want it sugary, or sugarier, or sugarierier.

Or if people carp too much, we go ahead and give them a macro too.  Call
it p5dotdot or some such.

: What comes in place of ...? (An adverb?)

Presumably a named arg of some sort, maybe

    if flipflop(state, { p5dot() == 1 }, { p5dot() == 10 }, :after) {...}

or some such.

Now I'm trying to figure out the uses of a closure that ends with:

    return \state;

That would allow a caller to change my state without me keeping track
of it at all.  Works sort of a like a (void*) that's reserved for
the user.  On the other hand, if it's returning a bare state it's
not gonna be very good at returning anything else useful.  But maybe

    return $value, \state;

has something useful in it.

Larry

Reply via email to