Re: [svn:perl6-synopsis] r11969 - doc/trunk/design/syn
[EMAIL PROTECTED] wrote: +=head1 Cross operators + +The final metaoperator is the C metaoperator. It applies the +modified operator across all permutations of its list arguments. All +C operators are of list infix precedence, and are list associative. + +The bare form of C is considered an operator in its own right. +Saying: + + X 1,2 X + +produces + +['a', 1, 'x'], +['a', 1, 'y'], +['a', 2, 'x'], +['a', 2, 'y'], +['b', 1, 'x'], +['b', 1, 'y'], +['b', 2, 'x'], +['b', 2, 'y'] Would it be possible to extend C to pass its arguments to the iterator being 'nexted'. Along with proper arguments to whichever lazy object it generated by X, it'd enable this: (where :$slice argument would cause X to increment the member of the tuple at the appropriate index, and resets all the other ones): for 1,2,3 X 1,2,3 -> [$i, $j] { if $j > $i { next(slice => 0); } say $i, $j; } 11 21 22 31 32 33 As another example, if a tree iterator has :right keyword argument to return the node to the right, you could do: for $tree.each -> $node { if $node.value > $goal { next; } if $node.value < $goal {next :right; } return $node; } Alternative proposal could be to allow expression after next, which gets evaluated instead of incrementing the iterator, iterator is topic in that expression and is replaced by the result. So next True; causes infinite loop, next .left calls .left accessor and next .right calls right accessor before reentering loop (but doesn't do the default increment that for does).
Re: [svn:perl6-synopsis] r11975 - doc/trunk/design/syn
> svn log, speaking on larry's behalf (>): > > +The string concatenating form is: > > + > > + X~X <1 2> # 'a1', 'a2', 'b1', 'b2' > > + > > +The C operator desugars to something like: > > + > > +[~]�( X <1 2> ) # 'a1', 'a2', 'b1', 'b2' ^ > If the C variant already concatenates strings, why is it done > explicitly in the desugaring of C? Probably not what you > intended. I think it's just that the change is incomplete. It looks like the X I've marked should have been changed to a XX. -- "Of all things, good sense is the most fairly distributed: everyone thinks he is so well supplied with it that even those who are the hardest to satisfy in every other respect never desire more of it than they already have." -- Descartes, 1637 http://surreal.istic.org/ pgpjILcxxtBjT.pgp Description: PGP signature
Re: [svn:perl6-synopsis] r11975 - doc/trunk/design/syn
Daniel (>), Carl (>>), svn log, speaking on larry's behalf (>>>): > > +The string concatenating form is: > > + > > + X~X <1 2> # 'a1', 'a2', 'b1', 'b2' > > + > > +The C operator desugars to something like: > > + > > +[~]�( X <1 2> ) # 'a1', 'a2', 'b1', 'b2' ^ > If the C variant already concatenates strings, why is it done > explicitly in the desugaring of C? Probably not what you > intended. I think it's just that the change is incomplete. It looks like the X I've marked should have been changed to a XX. Yes, I suspected so too, though I wasn't sure so I didn't write it. :) Even better, it could be changed into C, unnecessitating another desugaring (mental or parse-al). // Carl
[svn:perl6-synopsis] r11976 - doc/trunk/design/syn
Author: larry Date: Wed Sep 13 07:03:51 2006 New Revision: 11976 Modified: doc/trunk/design/syn/S03.pod Log: typo spotted by Carl Mäsak++ Modified: doc/trunk/design/syn/S03.pod == --- doc/trunk/design/syn/S03.pod(original) +++ doc/trunk/design/syn/S03.podWed Sep 13 07:03:51 2006 @@ -14,7 +14,7 @@ Date: 8 Mar 2004 Last Modified: 13 Sep 2006 Number: 3 - Version: 61 + Version: 62 =head1 Changes to Perl 5 operators @@ -1042,9 +1042,9 @@ The C operator desugars to something like: -[~]«( X <1 2> ) # 'a1', 'a2', 'b1', 'b2' +[~]«( X,X <1 2> ) # 'a1', 'a2', 'b1', 'b2' -The list concatenating form +The list concatenating form, C, when used like this: X,X 1,2 X,X @@ -1082,6 +1082,8 @@ Note that only the first term of an C operator may reasonably be an infinite list. +Multidimensional lists should be handled properly. + =head1 Junctive operators C<|>, C<&>, and C<^> are no longer bitwise operators (see
Re: Unpacking tree node parameters
在 Sep 4, 2006 2:11 AM 時,Gaal Yahas 寫到: Unless I'm mistaken, this doesn't cast back to subroutine signature land very well: sub f1 (Dog ($fido, $spot)) { ... } sub f2 (Dog $ ($fido, $spot)) { ... } sub f3 (Dog :($fido, $spot)) { ... } Correct. Unless Audrey's latest S03 patch pertains here as well, and Dog distributes; in that case it would be as if the programmer had written sub f1 ([Dog $fido, Dog $spot]) { ... } Yes, except there's no [] there; it's two positional parameters. as described in the preceding section, "Unpacking array parameters". If this is *not* the case, then f1 is not ambiguous! TimToady++ just confirmed on IRC that it is indeed the case. Please clarify, so I can clean up the confusing paragraph and introduce the optionality of the colon less jarringly. Woot! :-) Audrey
[svn:perl6-synopsis] r11977 - doc/trunk/design/syn
Author: larry Date: Wed Sep 13 11:05:34 2006 New Revision: 11977 Modified: doc/trunk/design/syn/S02.pod doc/trunk/design/syn/S03.pod doc/trunk/design/syn/S06.pod doc/trunk/design/syn/S09.pod doc/trunk/design/syn/S12.pod Log: Metamethod revamp. Modified: doc/trunk/design/syn/S02.pod == --- doc/trunk/design/syn/S02.pod(original) +++ doc/trunk/design/syn/S02.podWed Sep 13 11:05:34 2006 @@ -12,9 +12,9 @@ Maintainer: Larry Wall <[EMAIL PROTECTED]> Date: 10 Aug 2004 - Last Modified: 27 Aug 2006 + Last Modified: 13 Sept 2006 Number: 2 - Version: 66 + Version: 67 This document summarizes Apocalypse 2, which covers small-scale lexical items and typological issues. (These Synopses also contain @@ -455,13 +455,11 @@ can speed it up.) Some object types can behave as value types. Every object can produce -a "safe key identifier" (C for short) that uniquely identifies the +a "WHICH" value that uniquely identifies the object for hashing and other value-based comparisons. Normal objects just use their address in memory, but if a class wishes to behave as a -value type, it can define a C<.SKID> method that makes different objects +value type, it can define a C<.WHICH> method that makes different objects look like the same object if they happen to have the same contents. -SKID may also stand for "static key id", or "silly key id", or -"secret key id", or "supercalifragilisticexpialidocious key id". =item * @@ -483,13 +481,13 @@ =item * -Every object supports a C function/method that returns the +Every object supports a C function/method that returns the metaclass instance managing it, regardless of whether the object is defined: -'x'.META.get_method_list; # get available methods for strings -Str.META.get_method_list; # same thing with the prototype object Str -META(Str).get_method_list; # same thing as function call +'x'.HOW.get_method_list; # get available methods for strings +Str.HOW.get_method_list; # same thing with the prototype object Str +HOW(Str).get_method_list; # same thing as function call 'x'.get_method_list;# this is an error - not a meta object Str.get_method_list;# same thing Modified: doc/trunk/design/syn/S03.pod == --- doc/trunk/design/syn/S03.pod(original) +++ doc/trunk/design/syn/S03.podWed Sep 13 11:05:34 2006 @@ -14,7 +14,7 @@ Date: 8 Mar 2004 Last Modified: 13 Sep 2006 Number: 3 - Version: 62 + Version: 63 =head1 Changes to Perl 5 operators @@ -373,7 +373,7 @@ C objects, but it is true that C<@a === @a> because those are the same C object). -Any object type may pretend to be a value type by defining a C<.SKID> +Any object type may pretend to be a value type by defining a C<.WHICH> method which returns a value type that can be recursively compared using C<===>, or in cases where that is impractical, by overloading C<===> such that the comparison treats values consistently with their @@ -494,7 +494,7 @@ for ^(3,3) { ... } # (0,0)(0,1)(0,2)(1,0)(1,1)(1,2)(2,0)(2,1)(2,2) If applied to a type name, it indicates the metaclass instance instead, -so C<^Moose> is short for C or C. It still kinda +so C<^Moose> is short for C or C. It still kinda means "what is this thing's domain" in an abstract sort of way. =item * The C<...> operator is the "yada, yada, yada" list operator, @@ -512,7 +512,7 @@ variants C<.*>, C<.?>, and C<.+> to control how multiple related methods of the same name are handled. The C<.=> operator does inplace modification of the object on the left. The C<.^> operator calls a class metamethod; -C is short for C. +C is short for C. =item * Unary C<=> reads lines from a filehandle or filename, or iterates an iterator, or in general causes a scalar to explode its guts Modified: doc/trunk/design/syn/S06.pod == --- doc/trunk/design/syn/S06.pod(original) +++ doc/trunk/design/syn/S06.podWed Sep 13 11:05:34 2006 @@ -13,9 +13,9 @@ Maintainer: Larry Wall <[EMAIL PROTECTED]> Date: 21 Mar 2003 - Last Modified: 25 Aug 2006 + Last Modified: 13 Sept 2006 Number: 6 - Version: 53 + Version: 54 This document summarizes Apocalypse 6, which covers subroutines and the @@ -1358,7 +1358,7 @@ Objects with these types behave like values, i.e. C<$x === $y> is true if and only if their types and contents are identical (that is, if -C<$x.SKID> eqv C<$y.SKID>). +C<$x.WHICH> eqv C<$y.WHICH>). Bit Perl single bit (allows traits, aliasing, undef, etc.) Int Perl integer (allows Inf/NaN, arbitrary precision, etc.) @@ -1382,7 +1382,7 @@ =head2 Mutable types -Objects with these types have distinct C<.SKID> values that do not change +O
Re: [svn:perl6-synopsis] r11977 - doc/trunk/design/syn
At 11:05 AM -0700 9/13/06, [EMAIL PROTECTED] wrote: Modified: doc/trunk/design/syn/S02.pod +'x'.HOW.get_method_list; # get available methods for strings Modified: doc/trunk/design/syn/S12.pod +The C<.HOW.getmethods> method returns method-descriptors containing: As you can see, there is a repeated inconsistency here as to the name of this meta-object method. While it is possible that the actual meta-object API hasn't been decided on yet, the stand-in Synopsis examples should at least be consistent. -- Darren Duncan
[svn:perl6-synopsis] r11978 - doc/trunk/design/syn
Author: larry Date: Wed Sep 13 15:20:27 2006 New Revision: 11978 Modified: doc/trunk/design/syn/S12.pod Log: Clarified that interogative methods are also named unaries. Modified: doc/trunk/design/syn/S12.pod == --- doc/trunk/design/syn/S12.pod(original) +++ doc/trunk/design/syn/S12.podWed Sep 13 15:20:27 2006 @@ -14,7 +14,7 @@ Date: 27 Oct 2004 Last Modified: 13 Sept 2006 Number: 12 - Version: 22 + Version: 23 =head1 Overview @@ -1506,6 +1506,12 @@ WHEN (reserved for events?) WHY(reserved for documentation?) +None of these methods takes arguments, so they may also be used as +named unary operators: + +$obj.WHAT # method form of P5's ref +WHAT $obj # unary form of P5's ref + In general, use of these in ordinary code should be a red flag that Something Very Strange is going on. (Hence the allcaps.) Most code should use Perl 6's operators that make use of this information
[svn:perl6-synopsis] r11979 - doc/trunk/design/syn
Author: larry Date: Wed Sep 13 17:36:38 2006 New Revision: 11979 Modified: doc/trunk/design/syn/S02.pod doc/trunk/design/syn/S12.pod Log: regularized metaobject method names as requested by dduncan++ Modified: doc/trunk/design/syn/S02.pod == --- doc/trunk/design/syn/S02.pod(original) +++ doc/trunk/design/syn/S02.podWed Sep 13 17:36:38 2006 @@ -14,7 +14,7 @@ Date: 10 Aug 2004 Last Modified: 13 Sept 2006 Number: 2 - Version: 67 + Version: 68 This document summarizes Apocalypse 2, which covers small-scale lexical items and typological issues. (These Synopses also contain @@ -485,12 +485,12 @@ metaclass instance managing it, regardless of whether the object is defined: -'x'.HOW.get_method_list; # get available methods for strings -Str.HOW.get_method_list; # same thing with the prototype object Str -HOW(Str).get_method_list; # same thing as function call +'x'.HOW.methods; # get available methods for strings +Str.HOW.methods; # same thing with the prototype object Str +HOW(Str).methods; # same thing as function call -'x'.get_method_list;# this is an error - not a meta object -Str.get_method_list;# same thing +'x'.methods;# this is likely an error - not a meta object +Str.methods;# same thing (For a prototype system (a non-class-based object system), all objects are merely managed by the same meta object.) Modified: doc/trunk/design/syn/S12.pod == --- doc/trunk/design/syn/S12.pod(original) +++ doc/trunk/design/syn/S12.podWed Sep 13 17:36:38 2006 @@ -14,7 +14,7 @@ Date: 27 Oct 2004 Last Modified: 13 Sept 2006 Number: 12 - Version: 23 + Version: 24 =head1 Overview @@ -1532,19 +1532,19 @@ for the class (or other metaobject protocol) implementing the objects of the class: -MyClass.getmethods() # call MyClass's .getmethods method (error?) -MyClass.HOW.getmethods() # get the method list of MyClass +MyClass.methods() # call MyClass's .methods method (error?) +MyClass.HOW.methods() # get the method list of MyClass -The C<^> metasyntax is equivalent to .HOW: +The C<^> metasyntax is equivalent to C<.HOW>: -MyClass.HOW.getmethods() # get the method list of MyClass -^MyClass.getmethods() # get the method list of MyClass -MyClass.^getmethods() # get the method list of MyClass +MyClass.HOW.methods() # get the method list of MyClass +^MyClass.methods() # get the method list of MyClass +MyClass.^methods() # get the method list of MyClass Each object of the class also has a C<.HOW> or C<.^> method: -$obj.HOW.getmethods(); -$obj.^getmethods(); +$obj.HOW.methods(); +$obj.^methods(); Class traits may include: @@ -1572,7 +1572,7 @@ prototype objects, in which case stringification is not likely to produce something of interest to non-gurus.) -The C<.HOW.getmethods> method returns method-descriptors containing: +The C<.HOW.methods> method returns method-descriptors containing: name the name of the method signature the parameters of the method @@ -1580,11 +1580,11 @@ multi whether duplicate names are allowed do the method body -The C<.getmethods> method has a selector parameter that lets you +The C<.methods> method has a selector parameter that lets you specify whether you want to see a flattened or hierarchical view, whether you're interested in private methods, and so forth. -The C<.getattributes> method returns a list of attribute descriptors +The C<.attributes> method returns a list of attribute descriptors that have traits like these: name @@ -1603,7 +1603,23 @@ $obj.HOW.does(Dog) $obj.HOW.isa(Mammal) -But C gives you shortcuts to those, if you don't override them. +or + +$obj.^can("bark") +$obj.^does(Dog) +$obj.^isa(Mammal) + +But C gives you shortcuts to those: + +$obj.can("bark") +$obj.does(Dog) +$obj.isa(Mammal) + +These, may, of course, be overridden in a subclass, so don't use the +short form unless you wish to allow for overrides. In general, C +will delegate only those metamethods that read well when reasoning +about an individual object. Infrastructural methods like C<.methods> +and C<.attributes> are not delegated, so C<$obj.methods> fails. The smartmatch: