Author: larry
Date: Wed Apr 5 10:19:49 2006
New Revision: 8561
Modified:
doc/trunk/design/syn/S03.pod
Log:
Clarified identity and trivial properties for too-short reduce ops.
Modified: doc/trunk/design/syn/S03.pod
==============================================================================
--- doc/trunk/design/syn/S03.pod (original)
+++ doc/trunk/design/syn/S03.pod Wed Apr 5 10:19:49 2006
@@ -12,9 +12,9 @@
Maintainer: Larry Wall <[EMAIL PROTECTED]>
Date: 8 Mar 2004
- Last Modified: 1 Apr 2006
+ Last Modified: 5 Apr 2006
Number: 3
- Version: 14
+ Version: 15
=head1 Operator renaming
@@ -198,7 +198,7 @@
=head1 Reduction operators
-The other metaoperator in Perl 6 is the reduction operator. Any binary
+The other metaoperator in Perl 6 is the reduction operator. Any infix
operator can be surrounded by square brackets in term position to create
a list operator that reduces using that operation:
@@ -216,13 +216,24 @@
[<] 1, 3, 5; # 1 < 3 < 5
-If no arguments are given, the operator calls C<fail> (returning
-C<undef>, or throwing an exception if C<use fatal> is in effect). If
-exactly one argument is given, it is returned by default. However, this
-default doesn't make sense for an operator like C<< < >> that doesn't
-return the same type as it takes, so these kinds of operators overload
-the single-argument case to return something more meaningful. All the
-comparison operators return truth in this case.
+If no arguments are given, and if the infix operator defines
+an "identity" value property, that identity value is returned.
+(For instance, C<[*] @list> must return C<1> when C<@list> is empty.)
+In the absence of an identity value, the reduce metaoperator calls
+C<fail> (either returning C<undef>, or throwing an exception if C<use
+fatal> is in effect).
+
+If exactly one argument is given, it is returned by default. However,
+this default doesn't make sense for an operator like C<< < >> that
+doesn't return the same type as it takes, so these kinds of operators
+overload the single-argument case to return something more meaningful.
+All the comparison operators return truth in this case. This behavior
+is triggered by storage of the "trivial" value property on the infix
+operator. (The trivial property is also returned for 0 arguments.)
+
+The identity and trivial properties are stored on the most general
+default variant of the infix operator, if there is more than
+one variant. (Perhaps they can be returned simply by calling C<< infix:<op>()
>> and C<< infix:<op>($x) >>, respectively, letting the defaults handle it.)
This metaoperator can also be used on the semicolon second-dimension
separator: