> On 28 Feb 2015, at 15:41, Philip Hazelden <philip.hazel...@gmail.com> wrote:
> 
> I'm trying to represent something of the form "I've chosen one member of this 
> group, three members of that group, and nobody from the other group". A Bag 
> seems right for this, except that if I want to get the list of groups, it 
> doesn't seem to include the one with nobody:
> 
>     > Bag.new-from-pairs('a' => 0, 'b' => 3)
>     bag(b(3))
>     > my $b = BagHash.new()
>     BagHash.new()
>     > $b<a> = 3
>     3
>     > $b
>     BagHash.new(a(3))
>     > $b<a> = 0
>     0
>     > $b
>     BagHash.new()
> 
> I was hoping for something like Python's Counter:
> 
>     >>> Counter({'a': 0, 'b': 3})
>     Counter({'b': 3, 'a': 0})
>     >>> b = Counter()
>     >>> b['a'] = 2
>     >>> b
>     Counter({'a': 2})
>     >>> b['a'] = 0
>     >>> b
>     Counter({'a': 0})
> 
> I'm wondering if anyone has any bright ideas related to this. Two things come 
> to mind for myself: I could subclass Bag (or create a new implementation of 
> Baggy), but I'm not entirely sure how I'd do so sensibly (i.e. without 
> reimplementing basically the whole of Bag - operators, initializers, 
> stringifiers...); or I could create a new class which basically contains 
> nothing but a list and a bag whose keys are elements of the list.

An interesting thought for the non-mutable cases of Set, Bag and Mix.

For the mutable cases (SetHash, BagHash, MixHash), setting the element to 0, is 
effectively deleting it.

For the non-mutable case, I guess we could argue that *if* you specified it, it 
should exist as such.


Will ponder about this…


Liz

Reply via email to