On Tue, Jan 30, 2007 at 09:29:03PM +0100, TSa wrote:
: HaloO,
: 
: [EMAIL PROTECTED] wrote:
: >+Alternately, C<*+0> is the first element, and the subscript dwims
: >+from the front or back depending on the sign.  That would be more
: >+symmetrical, but makes the idea of C<*> in a subscript a little more
: >+distant from the notion of "all the keys", which would be a loss,
: >+and potentially makes C<+*> not mean the number of keys.
: 
: The distinction of the three cases would be through dispatch
: to different functions. The plain * goes to
: &postcircumfix<[ ]>:(Array,Whatever) while the other two go
: to &infix:<+>(Whatever,Int) and &infix:<->:(Whatever,Int)
: respectively. In the latter cases the Whatever type somehow must
: package the array.

I don't think we want Whatever to package the array, since...

: Perhaps it is actually Whatever of Array or
: somesuch. The return value is a normal Int suitable for indexing
: the array. Perhaps we need to restrict the second parameter to
: UInt unless these two operators wrap around depending on sign ;)
: That is @array[*+(-1)] actually retrieves that last entry and
: @array[*-(-1)] the first =:()
: 
: Can the index be set up before using it in an array index?
: 
:    my @a = 1,2,3;
:    my $x = *-1;
:    say @a[$x]; # prints 3
: 
: Would &infix:<-> return a lazy Whatever value that becomes
: a specific index when it hits &postcircumfix<[ ]>? That is
: we have something like Whatever arithmetic?

...I think that should work.  The *-1 value just means "one before
Whatever", and the dwim is, as you say, lazy.  Or perhaps this generalizes
to an odd form of currying:

    &replicate := * xx 42;

But then it's not clear how the eventual victim would know how to
distinguish *+42 from *-42 if it's only getting some kind of closure
to call.  So I think we still have to dispatch to Whatever and let
the Whatever code extract any relevant relative information knowing
that a "dwim" was explicitly called for by use of *.

Larry

Reply via email to