[svn:perl6-synopsis] r13548 - doc/trunk/design/syn

2007-01-29 Thread larry
Author: larry
Date: Mon Jan 29 21:05:36 2007
New Revision: 13548

Modified:
   doc/trunk/design/syn/S02.pod

Log:
More clarifications requested by thom++.


Modified: doc/trunk/design/syn/S02.pod
==
--- doc/trunk/design/syn/S02.pod(original)
+++ doc/trunk/design/syn/S02.podMon Jan 29 21:05:36 2007
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall <[EMAIL PROTECTED]>
   Date: 10 Aug 2004
-  Last Modified: 23 Dec 2006
+  Last Modified: 29 Jan 2007
   Number: 2
-  Version: 82
+  Version: 83
 
 This document summarizes Apocalypse 2, which covers small-scale
 lexical items and typological issues.  (These Synopses also contain
@@ -646,9 +646,6 @@
 A variant of C<*> is the C<**> term.  It is generally understood to
 be a multidimension form of C<*> when that makes sense.
 
-The C<***> variant serves as the insertion point of a list of feeds.
-That insertion point may be targeted by feeding into C<*>.  See S06.
-
 Other uses for C<*> will doubtless suggest themselves over time.  These
 can be given meaning via the MMD system, if not the compiler.  In general
 a C should be interpreted as maximizing the degrees of freedom
@@ -673,12 +670,15 @@
 
 These can behave as values or objects of any class, except that
 C always returns false.  One can create them with the
-built-in C and C functions.  (See S02 for how failures
+built-in C and C functions.  (See S04 for how failures
 are handled.)
 
-Undef   Undefined (can serve as a prototype object of any class)
+Undef   Undefined (variants serve as prototype objects of classes)
 WhateverWildcard (like undef, but subject to do-what-I-mean via MMD)
-Failure Failure (throws an exception if not handled properly)
+Failure Failure (lazy exceptions, thrown if not handled properly)
+
+Whenever you declare any kind of type, class, module, or package, you're
+automatically declaring a undefined prototype value with the same name.
 
 =head2 Immutable types
 


[svn:perl6-synopsis] r13547 - doc/trunk/design/syn

2007-01-29 Thread larry
Author: larry
Date: Mon Jan 29 17:41:22 2007
New Revision: 13547

Modified:
   doc/trunk/design/syn/S04.pod

Log:
typo from KF8NH++


Modified: doc/trunk/design/syn/S04.pod
==
--- doc/trunk/design/syn/S04.pod(original)
+++ doc/trunk/design/syn/S04.podMon Jan 29 17:41:22 2007
@@ -444,7 +444,7 @@
 within the dynamic scope of the C.  The C function's
 signature is like that of C; it merely captures the C
 of its argments without imposing any additional constraints (in the
-absense of context propagation by the optimizer).  The value returned
+absence of context propagation by the optimizer).  The value returned
 by the C to its own context is that same C object (which
 is ignored when the C is in void context).  Regardless of the
 C's context, the C object is also added to the list of


Re: [svn:perl6-synopsis] r13545 - doc/trunk/design/syn

2007-01-29 Thread Brandon S. Allbery KF8NH


On Jan 29, 2007, at 17:06 , [EMAIL PROTECTED] wrote:


+absense of context propagation by the optimizer).  The value returned


Minor spelling nit:  "absence"

--
brandon s. allbery[linux,solaris,freebsd,perl] [EMAIL PROTECTED]
system administrator [openafs,heimdal,too many hats] [EMAIL PROTECTED]
electrical and computer engineering, carnegie mellon universityKF8NH





[svn:perl6-synopsis] r13546 - doc/trunk/design/syn

2007-01-29 Thread larry
Author: larry
Date: Mon Jan 29 16:05:40 2007
New Revision: 13546

Modified:
   doc/trunk/design/syn/S04.pod
   doc/trunk/design/syn/S06.pod

Log:
More infonuggets for gaal++.


Modified: doc/trunk/design/syn/S04.pod
==
--- doc/trunk/design/syn/S04.pod(original)
+++ doc/trunk/design/syn/S04.podMon Jan 29 16:05:40 2007
@@ -14,7 +14,7 @@
   Date: 19 Aug 2004
   Last Modified: 29 Jan 2007
   Number: 4
-  Version: 49
+  Version: 50
 
 This document summarizes Apocalypse 4, which covers the block and
 statement syntax of Perl.
@@ -494,6 +494,14 @@
 A C is not considered a loop, but it is easy to combine with a loop
 statement as in the examples above.
 
+If any function called as part of a C list asks what its context
+is, it will be told it was called in list context regardless of the
+eventual binding of the returned C.  If that is not the
+desired behavior you must coerce the call to an appropriate context.
+In any event, such a function is called only once at the time the
+C object is generated, not when it is bound (which could
+happen more than once).
+
 =head2 Other C-like forms
 
 Other similar C-only forms may also take bare statements,

Modified: doc/trunk/design/syn/S06.pod
==
--- doc/trunk/design/syn/S06.pod(original)
+++ doc/trunk/design/syn/S06.podMon Jan 29 16:05:40 2007
@@ -13,9 +13,9 @@
 
   Maintainer: Larry Wall <[EMAIL PROTECTED]>
   Date: 21 Mar 2003
-  Last Modified: 28 Jan 2007
+  Last Modified: 29 Jan 2007
   Number: 6
-  Version: 67
+  Version: 68
 
 
 This document summarizes Apocalypse 6, which covers subroutines and the
@@ -1621,6 +1621,15 @@
 caller may use C<< prefix:<|> >> to inline the returned values as part of the
 new argument list.  The caller may also bind the returned C directly.
 
+If any function called as part of a return list asks what its context
+is, it will be told it was called in list context regardless of the
+eventual binding of the returned C.  If that is not the
+desired behavior you must coerce the call to an appropriate context,
+(or declare the return type of the function to perform such a coercion).
+In any event, such a function is called only once at the time the
+C object is generated, not when it is later bound (which
+could happen more than once).
+
 =head2 The C function
 
 The C function returns an object that describes a particular 


Re: [svn:perl6-synopsis] r13545 - doc/trunk/design/syn

2007-01-29 Thread Gaal Yahas
On Mon, Jan 29, 2007 at 02:06:51PM -0800, [EMAIL PROTECTED] wrote:
> +The C function essentially has two contexts simultaneously, the
> +context in which the gather is operating, and the context in which the
> +C is operating.  These need not be identical contexts, since they
> +may bind or coerce the resulting captures differently:
> +
> +my @y;
> +@x = gather for 1..2 {  # @() context for list of captures
> +my $x = take $_, $_ * 10;   # $() context for individual capture
> +push @y, $x;
> +}
> +# @x returns 1,10,2,20
> +# @y returns [1,10],[2,20]

XXX = gather {
YYY
take f();
ZZZ
}

sub f () {
return want.Scalar ?? 42 !! 54;
}

Which of XXX, YYY, and ZZZ influence whether the taken value is 42 or
54? Please confirm there's *no way* that &f is entered twice here :-)

(If I'm following correctly, then take's args are basically evaluated
in list context. If YYY is something like "$scalar = " that list gets
Captured, but there's still a list there.)

-- 
Gaal Yahas <[EMAIL PROTECTED]>
http://gaal.livejournal.com/


[svn:perl6-synopsis] r13545 - doc/trunk/design/syn

2007-01-29 Thread larry
Author: larry
Date: Mon Jan 29 14:06:49 2007
New Revision: 13545

Modified:
   doc/trunk/design/syn/S04.pod

Log:
Clarifications requested by gaal++.


Modified: doc/trunk/design/syn/S04.pod
==
--- doc/trunk/design/syn/S04.pod(original)
+++ doc/trunk/design/syn/S04.podMon Jan 29 14:06:49 2007
@@ -438,12 +438,19 @@
 =head2 The gather statement
 
 A variant of C is C.  Like C, it is followed by a
-statement or block, and executes it once.  Unlike C, it evaluates the
-statement or block in void context; its return
-value is instead specified by calling the C function one or more times
-within the dynamic scope of the C.  The returned values are in the
-form of a lazy multislice, with each slice corresponding to one
-C capture.  (A multislice is lazily flattened in normal list context,
+statement or block, and executes it once.  Unlike C, it evaluates
+the statement or block in void context; its return value is instead
+specified by calling the C list prefix operator one or more times
+within the dynamic scope of the C.  The C function's
+signature is like that of C; it merely captures the C
+of its argments without imposing any additional constraints (in the
+absense of context propagation by the optimizer).  The value returned
+by the C to its own context is that same C object (which
+is ignored when the C is in void context).  Regardless of the
+C's context, the C object is also added to the list of
+values being gathered, which is returned by the C in the form
+of a lazy multislice, with each slice corresponding to one C
+capture.  (A multislice is lazily flattened in normal list context,
 but you may "unflatten" it again with a C<@@()> contextualizer.)
 
 Because C evaluates its block or statement in void context,
@@ -458,8 +465,34 @@
 $previous = take $_;
 }
 
+The C function essentially has two contexts simultaneously, the
+context in which the gather is operating, and the context in which the
+C is operating.  These need not be identical contexts, since they
+may bind or coerce the resulting captures differently:
+
+my @y;
+@x = gather for 1..2 {  # @() context for list of captures
+my $x = take $_, $_ * 10;   # $() context for individual capture
+push @y, $x;
+}
+# @x returns 1,10,2,20
+# @y returns [1,10],[2,20]
+
+Likewise, we can just remember the gather's result by binding and
+later coerce it:
+
+$c := gather for 1..2 {
+take $_, $_ * 10;
+}
+# @$c returns 1,10,2,20
+# @@$c returns [1,10],[2,20]
+# $$c returns [[1,10],[2,20]]
+
+Note that the C itself is in void context in this example because
+the C loop is in void context.
+
 A C is not considered a loop, but it is easy to combine with a loop
-as in the example above.
+statement as in the examples above.
 
 =head2 Other C-like forms
 


Re: [svn:perl6-synopsis] r13543 - doc/trunk/design/syn

2007-01-29 Thread Gaal Yahas
On Mon, Jan 29, 2007 at 10:08:34PM +0200, Gaal Yahas wrote:
> On Mon, Jan 29, 2007 at 10:01:08PM +0200, Gaal Yahas wrote:
> > > +Because C evaluates its block or statement in void context,
> > > +this typically causes the C statement to be evaluated in void
> > > +context.  However, a C statement that is not in void context
> > > +gathers its arguments I and also returns them unchanged.
> > > +This makes it easy to keep track of what you last "took":
> > > +
> > > +my @uniq = gather for @list {
> > > +state $previous = take $_;
> > > +next if $_ === $previous;
> > > +$previous = take $_;
> > > +}
> > 
> > What does it mean for take to be evaluated in void context?
> > 
> > What are the gathered values here?
> > 
> >take 1, 2;  # easy. flattened 1 and then 2, right?
> >@x = take 1, 2; # same thing?
> >$x = take 1, 2; # same thing? [1, 2]?
> 
> In fact, $x = take 5;# if this were Perl 5, I might expect
>  # either 1 or [1] here!

Ugh, sorry, I meant either 1 or [5].

-- 
Gaal Yahas <[EMAIL PROTECTED]>
http://gaal.livejournal.com/


Re: [svn:perl6-synopsis] r13543 - doc/trunk/design/syn

2007-01-29 Thread Gaal Yahas
On Mon, Jan 29, 2007 at 10:01:08PM +0200, Gaal Yahas wrote:
> > +Because C evaluates its block or statement in void context,
> > +this typically causes the C statement to be evaluated in void
> > +context.  However, a C statement that is not in void context
> > +gathers its arguments I and also returns them unchanged.
> > +This makes it easy to keep track of what you last "took":
> > +
> > +my @uniq = gather for @list {
> > +state $previous = take $_;
> > +next if $_ === $previous;
> > +$previous = take $_;
> > +}
> 
> What does it mean for take to be evaluated in void context?
> 
> What are the gathered values here?
> 
>take 1, 2;  # easy. flattened 1 and then 2, right?
>@x = take 1, 2; # same thing?
>$x = take 1, 2; # same thing? [1, 2]?

In fact, $x = take 5;# if this were Perl 5, I might expect
 # either 1 or [1] here!

-- 
Gaal Yahas <[EMAIL PROTECTED]>
http://gaal.livejournal.com/


Re: [svn:perl6-synopsis] r13543 - doc/trunk/design/syn

2007-01-29 Thread Gaal Yahas
On Mon, Jan 29, 2007 at 10:39:27AM -0800, [EMAIL PROTECTED] wrote:
> +Because C evaluates its block or statement in void context,
> +this typically causes the C statement to be evaluated in void
> +context.  However, a C statement that is not in void context
> +gathers its arguments I and also returns them unchanged.
> +This makes it easy to keep track of what you last "took":
> +
> +my @uniq = gather for @list {
> +state $previous = take $_;
> +next if $_ === $previous;
> +$previous = take $_;
> +}

What does it mean for take to be evaluated in void context?

What are the gathered values here?

   take 1, 2;  # easy. flattened 1 and then 2, right?
   @x = take 1, 2; # same thing?
   $x = take 1, 2; # same thing? [1, 2]?

-- 
Gaal Yahas <[EMAIL PROTECTED]>
http://gaal.livejournal.com/


[svn:perl6-synopsis] r13544 - doc/trunk/design/syn

2007-01-29 Thread larry
Author: larry
Date: Mon Jan 29 10:45:26 2007
New Revision: 13544

Modified:
   doc/trunk/design/syn/S04.pod

Log:
Minor cleanups


Modified: doc/trunk/design/syn/S04.pod
==
--- doc/trunk/design/syn/S04.pod(original)
+++ doc/trunk/design/syn/S04.podMon Jan 29 10:45:26 2007
@@ -441,14 +441,14 @@
 statement or block, and executes it once.  Unlike C, it evaluates the
 statement or block in void context; its return
 value is instead specified by calling the C function one or more times
-within the dynamic scope of the gather.  The returned values are in the
+within the dynamic scope of the C.  The returned values are in the
 form of a lazy multislice, with each slice corresponding to one
 C capture.  (A multislice is lazily flattened in normal list context,
-but you may "unflatten" it again with a @@() contextualizer.)
+but you may "unflatten" it again with a C<@@()> contextualizer.)
 
 Because C evaluates its block or statement in void context,
-this typically causes the C statement to be evaluated in void
-context.  However, a C statement that is not in void context
+this typically causes the C function to be evaluated in void
+context.  However, a C function that is not in void context
 gathers its arguments I and also returns them unchanged.
 This makes it easy to keep track of what you last "took":
 


[svn:perl6-synopsis] r13543 - doc/trunk/design/syn

2007-01-29 Thread larry
Author: larry
Date: Mon Jan 29 10:39:25 2007
New Revision: 13543

Modified:
   doc/trunk/design/syn/S04.pod

Log:
Note that take is intended to work en passant as suggested by gabriele renzi++
Also clarified that gather provides a void context to its victim.


Modified: doc/trunk/design/syn/S04.pod
==
--- doc/trunk/design/syn/S04.pod(original)
+++ doc/trunk/design/syn/S04.podMon Jan 29 10:39:25 2007
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall <[EMAIL PROTECTED]>
   Date: 19 Aug 2004
-  Last Modified: 25 Jan 2007
+  Last Modified: 29 Jan 2007
   Number: 4
-  Version: 48
+  Version: 49
 
 This document summarizes Apocalypse 4, which covers the block and
 statement syntax of Perl.
@@ -435,13 +435,33 @@
 explicit because it's not out front where it can be seen.  You can, of
 course, use a placeholder parameter if you also use C.)
 
+=head2 The gather statement
+
 A variant of C is C.  Like C, it is followed by a
-statement or block, and executes it once.  Unlike C, its return
-value is specified by calling the C function one or more times
-within the dynamic scope of the gather.  The returned values are in
-the form of a lazy multislice, with each dimension corresponding to
-one C slice.  (A multislice is flattened in most list contexts.).
-A C is not considered a loop.
+statement or block, and executes it once.  Unlike C, it evaluates the
+statement or block in void context; its return
+value is instead specified by calling the C function one or more times
+within the dynamic scope of the gather.  The returned values are in the
+form of a lazy multislice, with each slice corresponding to one
+C capture.  (A multislice is lazily flattened in normal list context,
+but you may "unflatten" it again with a @@() contextualizer.)
+
+Because C evaluates its block or statement in void context,
+this typically causes the C statement to be evaluated in void
+context.  However, a C statement that is not in void context
+gathers its arguments I and also returns them unchanged.
+This makes it easy to keep track of what you last "took":
+
+my @uniq = gather for @list {
+state $previous = take $_;
+next if $_ === $previous;
+$previous = take $_;
+}
+
+A C is not considered a loop, but it is easy to combine with a loop
+as in the example above.
+
+=head2 Other C-like forms
 
 Other similar C-only forms may also take bare statements,
 including C, C, C, and C.  These constructs