Author: audreyt
Date: Wed Apr  2 08:56:38 2008
New Revision: 14532


* S09/"Parallelized parameters and autothreading":

  @a[$i, $j] etc in examples should read @a[$i; $j] instead.

  Also, clarify that "do -> { ... }" is intentionally calling the
  block via the do-once loop syntax, because a pointy sub at that
  point wouldn't trigger the statement-level-bare-block-autocall

  Reported by: John M. Dlugosz

Modified: doc/trunk/design/syn/S09.pod
--- doc/trunk/design/syn/S09.pod        (original)
+++ doc/trunk/design/syn/S09.pod        Wed Apr  2 08:56:38 2008
@@ -12,9 +12,9 @@
   Maintainer: Larry Wall <[EMAIL PROTECTED]>
   Date: 13 Sep 2004
-  Last Modified: 17 Mar 2008
+  Last Modified: 2 Apr 2008
   Number: 9
-  Version: 24
+  Version: 25
 =head1 Overview
@@ -1044,28 +1044,34 @@
 In the abstract (and often in the concrete), this puts an implicit
 loop around the block of the closure that visits all the possible
 subscript values for that dimension (unless the parameter is actually
-supplied to the closure, in which case that is what is used as the
-slice subscript).  This implicit loop is assumed to be parallelizable.
+supplied to the closure, in which case the supplied value is used as
+the slice subscript instead).
+This implicit loop is assumed to be parallelizable.
 So to write a typical tensor multiplication:
     Cijkl = Aij * Bkl
-you can just write this:
+you can simply call a closure with no arguments, allowing the C<autoindex>
+pragma to fill in the defaults:
     use autoindex;
-    do { @c[$^i, $^j, $^k, $^l] = @a[$^i, $^j] * @b[$^k, $^l] };
-or equivalently:
+    -> $i, $j, $k, $l { @c[$i; $j; $k; $l] = @a[$i; $j] * @b[$k; $l] }();
-    -> $i, $j, $k, $l { @c[$i, $j, $k, $l] = @a[$i, $j] * @b[$k, $l] }();
-or even:
+or you can use the C<do BLOCK> syntax (see L<S04/"The do-once loop">) to
+call that closure, which also implicitly iterates:
+    use autoindex;
     do -> $i, $j, $k, $l {
-        @c[$i, $j, $k, $l] = @a[$i, $j] * @b[$k, $l]
+        @c[$i; $j; $k; $l] = @a[$i; $j] * @b[$k; $l]
+or even use placeholder variables instead of a parameter list:
+    use autoindex;
+    do { @c[$^i; $^j; $^k; $^l] = @a[$^i; $^j] * @b[$^k; $^l] };
 That's almost pretty.
 It is erroneous for an unbound parameter to match multiple existing array

Reply via email to