Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

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

5 views
Skip to first unread message

la...@cvs.perl.org

unread,
Nov 28, 2006, 8:28:00 PM11/28/06
to perl6-l...@perl.org
Author: larry
Date: Tue Nov 28 17:27:59 2006
New Revision: 13483

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

Log:
Distinguished Set and Bag values from KeySet and KeyBag containers.


Modified: doc/trunk/design/syn/S06.pod
==============================================================================
--- doc/trunk/design/syn/S06.pod (original)
+++ doc/trunk/design/syn/S06.pod Tue Nov 28 17:27:59 2006
@@ -13,9 +13,9 @@

Maintainer: Larry Wall <la...@wall.org>
Date: 21 Mar 2003
- Last Modified: 31 Oct 2006
+ Last Modified: 28 Nov 2006
Number: 6
- Version: 60
+ Version: 62


This document summarizes Apocalypse 6, which covers subroutines and the
@@ -1365,8 +1365,9 @@
Block Executable objects that have lexical scopes
List Lazy Perl list (composed of Seq and Range parts)
Seq Completely evaluated (hence immutable) sequence
- Range Incrementally generated (hence lazy) sequence
- Set Unordered Seqs that allow no duplicates
+ Range A pair of Ordered endpoints; gens lazy Seq in list context
+ Set Unordered Seq that allows no duplicates
+ Bag Unordered Seq that allows duplicates
Junction Sets with additional behaviours
Pair Seq of two elements that serves as a one-element Mapping
Mapping Pairs with no duplicate keys
@@ -1379,9 +1380,12 @@
Objects with these types have distinct C<.WHICH> values that do not change
even if the object's contents change.

+ Scalar Perl scalar
Array Perl array
Hash Perl hash
- Scalar Perl scalar
+ KeyHash Perl hash that autodeletes values matching default
+ KeySet KeyHash of Bool (does Set in list/array context)
+ KeyBag KeyHash of UInt (does Bag in list/array context)
Buf Perl buffer (a stringish array of memory locations)
IO Perl filehandle
Routine Base class for all wrappable executable objects
@@ -1398,6 +1402,38 @@
Object Perl 6 object
Grammar Perl 6 pattern matching namespace

+A C<KeyHash> differs from a normal C<Hash> in how it handles default
+values. If the value of a C<KeyHash> element is set to the default
+value for the C<KeyHash>, the element is deleted. If undeclared,
+the default default for a C<KeyHash> is 0 for numeric types, C<False>
+for boolean types, and the null string for string and buffer types.
+A C<KeyHash> of a C<Object> type defaults to the undefined prototype
+for that type. More generally, the default default is whatever defined
+value an C<undef> would convert to for that value type. A C<KeyHash>
+of C<Scalar> deletes elements that go to either 0 or the null string.
+A C<KeyHash> also autodeletes keys for normal undef values (that is,
+those undefined values that do not contain an unthrown expections).
+
+A C<KeySet> is a C<KeyHash> of booleans with a default of C<False>.
+If you you use the C<Hash> interface and increment an element of a
+C<KeySet> its value becomes true (creating the element if it doesn't
+exist already). If you decrement the element it becomes false and
+is automatically deleted. When not used as a C<Hash> (that is,
+when used as an C<Array> or list or C<Set> object) a C<KeySet>
+behaves as a C<Set> of its keys. (Since the only possible value of
+a C<KeySet> is the C<True> value, it need not be represented in
+the actual implementation with any bits at all.)
+
+A C<KeyBag> is a C<KeyHash> of C<UInt> with default of 0. If you
+you use the C<Hash> interface and increment an element of a C<KeyBag>
+its value is increased by one (creating the element if it doesn't exist
+already). If you decrement the element the value is decreased by one;
+if the value goes to 0 the element is automatically deleted. When not
+used as a C<Hash> (that is, when used as an C<Array> or list or C<Bag>
+object) a C<KeyBag> behaves as a C<Bag> of its keys, with each key
+replicated the number of times specified by its corresponding value.
+(Use C<.kv> or C<.pairs> to suppress this behavior in list context.)
+
=head2 Value types

Explicit types are optional. Perl variables have two associated types:

Darren Duncan

unread,
Nov 28, 2006, 10:33:27 PM11/28/06
to perl6-l...@perl.org
At 5:28 PM -0800 11/28/06, la...@cvs.develooper.com wrote:
>Author: larry
>Date: Tue Nov 28 17:27:59 2006
>New Revision: 13483
>
>Modified:
> doc/trunk/design/syn/S06.pod
>
>Log:
>Distinguished Set and Bag values from KeySet and KeyBag containers.
<snip>

Ah, thank you. A nice clean-looking solution which accounts for many
aspects of the relevant problem space. -- Darren Duncan

Ruud H.G. van Tol

unread,
Nov 29, 2006, 3:08:00 AM11/29/06
to perl6-l...@perl.org
la...@cvs.develooper.com wrote:

> Distinguished Set and Bag values from KeySet and KeyBag containers.

Real nice.

Double-you:

> +A C<KeyBag> is a C<KeyHash> of C<UInt> with default of 0. If you
> +you

--
Affijn, Ruud

0 new messages