[E-Lang] Immutable map operations
Tyler Close
tclose@oilspace.com
Thu, 29 Mar 2001 09:01:31 +0100
MarkM wrote:
> >Works well for maps too:
> >
> > map <<= (key, value)
>
> Interesting. I think I like it.
>
>
> >">>" also seems plausible for "remove an element". The
> following would
> >remove one element equivalent to the given (key, value) pair.
> >
> > map >>= (key, value)
>
> Less plausible, as a normal "without" would only provide
> the key. Adapting
> ">>" to this fact yields even worse answers.
A normal without() would be:
map >>= key
and would mean "remove one element with a key equivalent to the given
key". I don't see how this is any "worse" than the "insert" syntax.
The operand to integer>> says what to "shift out", the map>> is
similarly told what to "shift out".
> >Or:
> >
> > str <<= 'a'
> >
> >Or:
> >
> > str |= [ 'a' ]
> >
> >To my eyes, the first two seem acceptable, but the third is
> >ridiculous.
>
> Could you explain why? (Even if you can't, your reaction
> is still valuable
> input of course.) In any case, even if we adopt your "<<"
> proposal, the
> second would still work by implication from our other choices.
Its the extra set of brackets that bother me.
All I wanted to do was add a single element to the collection. This
should be the easiest operation of all. The "| []" syntax makes me
feel like the language is asking me to jump through some extra hoops
just for the sake of some supposed compatibility with the "|"
operator.
The "| []" operator also reads like I am creating a new set and
computing the union. That may very well be a compatible interpretation
of the operation, but it's not the one I am thinking about when I want
to insert a single element.
The combination of two operators "|" and "[]" suggest that there are
two operations being done on this line of code and neither of them
immediately seem to have anything to do with "insert a single
element".
I am confused as to what the following would expand to:
str |= [ 'a', 'b' ]
expands to:
str := str op__with('a', 'b')
or:
str := str op_or( [a, b] )
The latter would append the characters 'a' and 'b' to the string. What
would the former do? And yet, the former is the normal expansion of
the "| []" operator.
Tyler