Larry Wall wrote:
...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;

Ohh, let me get that in my own words: the rhs replicates a Whatever
into a list of 42 Whatever values, then a code variable is bound to
this list. How would one access that thing? Does replicate()[*-1]
return the last Whatever and replicate()[0] the first? How does one
make use of such a Whatever value?

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.

I don't get that. Do you mean replicate()[*+42] that would be one
after the last Whatever and replicate()[*-42] that would be the first
Whatever in the list but indexed from the back? Or do you want to
index into the Whatevers like it would be the case for a range 0..*
which dispatches to &infix:<..>:(Int,Whatever) and returns a range
that is lazy at the end. IOW, I don't understand what
&infix:<xx>:(Whatever,Int) returns. I mean what type of Whatever
value is it? I understand that it is 42 times the same thing in
a list but what it is is unspecified for the moment. Such a Whatever
value is sort of parametric and adapts to the environment it is
finally used in. The two uses I see right now is in ranges and as
array index.

BTW, are Whatever ranges applicable to arrays?

   my @a = 0,1,2,3,4,5,6,7,8,9;
   my $i = 5..*;
   say @a[$i];  # prints 5 6 7 8 9

Is the Whateverness of the range kept and finally resolved
when applied to the array? Or does &postcircumfix:<[ ]> see
only a lazy range?

 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 *.

Could you make an example of what you mean here, please. Do you mean
a dispatch to &postcircumfix:<[ ]>?

Regards, TSa.

Reply via email to