[svn:perl6-synopsis] r13548 - doc/trunk/design/syn
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
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
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
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
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
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
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
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
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
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
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