Author: lwall
Date: 2009-05-06 00:20:38 +0200 (Wed, 06 May 2009)
New Revision: 26685

Modified:
   docs/Perl6/Spec/S32-setting-library/Containers.pod
Log:
[Containers] some work on various structures related to KeyHash
define .pick to work rationally on structures whose values represent weights.


Modified: docs/Perl6/Spec/S32-setting-library/Containers.pod
===================================================================
--- docs/Perl6/Spec/S32-setting-library/Containers.pod  2009-05-05 17:32:04 UTC 
(rev 26684)
+++ docs/Perl6/Spec/S32-setting-library/Containers.pod  2009-05-05 22:20:38 UTC 
(rev 26685)
@@ -15,8 +15,8 @@
                 Moritz Lenz <mor...@faui2k3.org>
                        Tim Nelson <wayl...@wayland.id.au>
  Date:          19 Feb 2009 extracted from S29-functions.pod
- Last Modified: 3 May 2009
- Version:       6
+ Last Modified: 5 May 2009
+ Version:       7
 
 The document is a draft.
 
@@ -674,17 +674,11 @@
 
 =back
 
-=head2 Tieable
-
-    role Tieable {...}
-
 =head1 Classes
 
 This documents Buf, List, Seq, Range, Set, Bag, Junction, Array, Hash, 
KeyHash, KeySet, 
 KeyBag, Pair, and Mapping.  
 
-XXX So where are KeySet and KeyBag.
-
 =head2 Seq
 
     class Seq does Positional {...}
@@ -703,10 +697,15 @@
 
     class Buf does Positional {...}
 
+A mutable container for an array of integer values in contiguous
+memory.
+
 =head2 Pair
 
     class Pair does Associative {...}
 
+The value of a pair is mutable; the key is not.
+
 =item invert
 
     our List multi method invert ( $pair: ) is export {
@@ -717,18 +716,76 @@
 
     class Mapping does Associative {...}
 
+An immutable hash value, essentially.  The keys may
+not contain duplicates, while the values may.
+
 =head2 Set
 
     class Set does Associative {...}
 
+A set of unique values.  When used as a hash always treats the set's
+values as the keys of the hash, returning C<True> for set elements.
+See C<KeySet> for a container that can represent different sets
+as keys are added or delete.
+
+=over
+
+=item pick
+
+ our multi method pick ( $set: Int $num = 1, Bool :$repl )
+ our multi method pick ( $set: Whatever, Bool :$repl )
+
+Like an ordinary list pick, but returns keys of the bag weighted by
+values, as if the keys were replicated the number of times indicated
+by the corresponding value and then list pick used. C<KeySet> is the
+mutable form of C<Set>.  A C<Set> responds to hash operators as
+if it were a C<Hash of True>.
+
+=back
+
+=head2 KeySet
+
+A mutable Set container, represented as C<KeyHash of True>.
+
 =head2 Bag
 
     class Bag does Associative {...}
 
+=over
+
+=item pick
+
+ our multi method pick ( $bag: Int $num = 1, Bool :$repl )
+ our multi method pick ( $bag: Whatever, Bool :$repl )
+
+Like an ordinary list pick, but returns keys of the bag weighted by
+values, as if the keys were replicated the number of times indicated
+by the corresponding value and then list pick used.  C<KeyBag> is the
+mutable form of C<Bag>.  A C<Bag> responds to hash operators as
+if it were a C<Hash of UInt>.
+
+=back
+
+=head2 KeyBag
+
+A mutable C<Bag> container, represented as C<KeyHash of UInt>.
+
 =head2 KeyHash
 
     class KeyHash does Associative {...}
 
+A KeyHash represents a mutable set of values, represented as the keys
+of a C<Hash>.  When asked to behave as a list it ignores its values
+and returns only C<.keys>.  C<KeySet> and C<KeyBag> are derived from
+this type, but constrain their values to be C<Bool> and C<UInt>,
+respectively.  A C<KeyHash> automatically deletes any key whose
+value goes false.
+
+=head2 KeyWeight
+
+A C<KeyHash of Num>; like a C<KeyBag> but may have non-integral
+weights for use in weighted picking.
+
 =head2 junction
 
 All method calls on junctions autothread because the type provides no public 
methods.

Reply via email to