Author: lwall
Date: 2010-03-05 01:03:51 +0100 (Fri, 05 Mar 2010)
New Revision: 29937

Modified:
   docs/Perl6/Spec/S09-data.pod
Log:
[S09] kill masak++'s @array[%100_000] in favor of a mapping closure
(The fact that % vars can't use _ is a different bug.)


Modified: docs/Perl6/Spec/S09-data.pod
===================================================================
--- docs/Perl6/Spec/S09-data.pod        2010-03-04 16:17:41 UTC (rev 29936)
+++ docs/Perl6/Spec/S09-data.pod        2010-03-05 00:03:51 UTC (rev 29937)
@@ -13,8 +13,8 @@
 
     Created: 13 Sep 2004
 
-    Last Modified: 26 Feb 2010
-    Version: 43
+    Last Modified: 4 Mar 2010
+    Version: 44
 
 =head1 Overview
 
@@ -244,18 +244,29 @@
 There is no autotruncation on the left end.  It's not that
 hard to write C<0>, and standard indexes always start there.
 
-As a special form, numeric subscripts may be declared as cyclical
-using an initial C<%>:
+As a special form, subscript declarations may add a C<:map> modifier
+supplying a closure, indicating that all index values are to be mapped
+through that closure.  For example, a subscript may be declared as cyclical:
 
-    my @seasons[%4];
+    my @seasons[4:map(*%4)];
 
 In this case, all numeric values are taken modulo 4, and no range truncation 
can
 ever happen.  If you say
 
     @seasons[-4..7] = 'a' .. 'l';
 
-then each element is written three times and the array ends up with 
C<['i','j','k','l']>.
+then each element is written three times and the array ends up with
+C<['i','j','k','l']>.  The mapping function is allowed to return
+fractional values; the index will be the C<floor> of that value.
+(It is still illegal to use a numeric index less that 0.)  One could
+map indexes logarithmically, for instance, as long as the numbers
+aren't so small they produce negative indices.
 
+Another use might be to map positive numbers to even slots and negative
+numbers to odd slots, so you get indices that are symmetric around 0
+(though Perl is not going to track the max-used even and odd slots
+for you when the data isn't symmetric).
+
 =head1 Typed arrays
 
 The type of value stored in each element of the array (normally C<Any> for 
unspecified type)

Reply via email to