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 <[email protected]>
Tim Nelson <[email protected]>
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.