Author: audreyt Date: Tue Sep 12 19:35:59 2006 New Revision: 11974 Modified: doc/trunk/design/syn/S03.pod
Log: * S03: Typographical and stylistic cleanups. Also, clarify that identity values of reduce hyperoperators is more logically defined by the way of a multi variant of zero arity, rather than specifying it inside the proto itself. Modified: doc/trunk/design/syn/S03.pod ============================================================================== --- doc/trunk/design/syn/S03.pod (original) +++ doc/trunk/design/syn/S03.pod Tue Sep 12 19:35:59 2006 @@ -12,9 +12,9 @@ Maintainer: Larry Wall <[EMAIL PROTECTED]> Date: 8 Mar 2004 - Last Modified: 12 Sep 2006 + Last Modified: 13 Sep 2006 Number: 3 - Version: 60 + Version: 61 =head1 Changes to Perl 5 operators @@ -50,7 +50,7 @@ a boolean (C<Bool>) context, and the C<[,]> list operator imposes a function-arguments (C<Capture>) context on its arguments. Unary sigils impose the container context implied by their sigil. -As with Perl 5, however, C<$$foo[bar]> parses as C<$($foo)[bar]>, +As with Perl 5, however, C<$$foo[bar]> parses as C<( $($foo) )[bar]>, so you need C<$($foo[bar])> to mean the other way. =item * Bitwise operators get a data type prefix: C<+>, C<~>, or C<?>. @@ -543,7 +543,7 @@ $_ $x Type of Match Implied Matching Code ====== ===== ===================== ============= - Any Code:($) scalar sub truth match if $x($_) + Any Code:($) scalar sub truth match if $x($_) Hash Hash hash keys identical match if $_.keys.sort »eq« $x.keys.sort Hash any(Hash) hash key intersection match if $_{any(Hash.keys)} Hash Array hash value slice truth match if $_{any(@$x)} @@ -602,7 +602,7 @@ you can't write: given $boolean { - when True {...} + when True {...} when False {...} } @@ -610,7 +610,7 @@ given $boolean { when .true {...} - when .not {...} + when .not {...} } Better, just use an C<if> statement. @@ -648,7 +648,7 @@ metaoperations--their semantics are supposed to be self-evident by the transformation of the base operator. -Note: spaces are never allowed between any metaoperator and the +Note: Spaces are never allowed between any metaoperator and the operator it's modifying, because all operators including modified ones have to be recognized by the Longest-Token Rule, which disallows spaces within a token. @@ -672,7 +672,7 @@ of any assignment operators is forced to be the same as that of ordinary assignment. -=head2 Negated relational operators. +=head2 Negated relational operators Any infix relational operator may be transformed into its negative by prefixing with C<!>. A couple of these have traditional shortcuts: @@ -720,7 +720,7 @@ In fact, this is the I<only> form that will work for an unordered type such as a C<Bag>: - Bag(3,8,2,9,3,8) >>-<< 1; # Bag(2,7,1,8,2,7) ~~ Bag(1,2,2,7,7,8) + Bag(3,8,2,9,3,8) >>-<< 1; # Bag(2,7,1,8,2,7) === Bag(1,2,2,7,7,8) When using a unary operator, only put the "hyper" on the side of the single operand: @@ -870,11 +870,15 @@ multi prefix:<[foo]> (Int $x) { 42 } multi prefix:<[foo]> (Str $x) { fail "Can't foo a single Str" } -However, the zero argument case must of necessity be handled by the -proto version, since there is no type information to dispatch on. -Operators that wish to specify an identity value should do so by -specifying the proto listop. Among the builtin operators, C<[+]()> -returns 0 and C<[*]()> returns 1, for instance. +However, the zero argument case cannot be defined this way, since there +is no type information to dispatch on. Operators that wish to specify an +identity value should do so by specifying a multi variant that takes zero +arguments: + + multi prefix:<[foo]> () { 0 } + +Among the builtin operators, C<[+]()> returns 0 and C<[*]()> returns 1, +for instance. By default, if there is one argument, the built-in reduce operators return that one argument. However, this default doesn't make sense