Brandon S Allbery KF8NH wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 11/7/10 23:19 , Jon Lang wrote:
>>     1 -- 2 -- 3
>>
>> Would be a Bag containing three elements: 1, 2, and 3.
>>
>> Personally, I wouldn't put a high priority on this; for my purposes,
>>
>>    Bag(1, 2, 3)
>>
>> works just fine.
>
> Hm. Bag as [! 1, 2, 3 !] and Set as {! 1, 2, 3 !}, with the outer bracket by
> analogy with arrays or hashes respectively and the ! having the mnemonic of
> looking like handles?  (I have to imagine there are plenty of Unicode
> brackets to match.)

That saves a singlr character over Bag( ... ) and Set( ... ),
respectively (or three characters, if you find decent unicode bracket
choices).  It still wouldn't be a big enough deal to me to bother with
it.

As well, my first impression upon seeing [! ... !] was to think
"you're negating everything inside?"  That said, I could get behind
doubled brackets:

    [[1, 2, 3]] # same as Bag(1, 2, 3)
    {{1, 2, 3}} # same as Set(1, 2, 3)

AFAIK, this would cause no conflicts with existing code.

Or maybe these should be reversed:

    [[1, 1, 2, 3]] # a Set containing 1, 2, and 3
    {{1, 1, 2, 3}} # a Bag containing two 1s, a 2, and a 3
    {{1 => 2, 2 => 1, 3 => 1}} # another way of defining the same Bag,
with explicit counts.

OTOH, perhaps the outermost character should always be a square brace,
to indicate that it operates primarily like a list; while the
innermost character should be either a square brace or a curly brace,
to hint at thye kind of syntax that you might find inside:

    [[1, 1, 2, 3]] # a Set containing 1, 2, and 3
    [{1, 1, 2, 3}] # a Bag containing two 1s, a 2, and a 3
    [{1 => 2, 2 => 1, 3 => 1}] # another way of defining the same Bag,
with explicit counts.

Yeah; I could see that.  The only catch is that it might cause
problems with existing code that nests square or curly braces inside
of square braces:

    [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # fail; would try to create Set
from "1, 2, 3], [4, 5, 6], [7, 8, 9"
    [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] # creates 3-by-3 array

...so maybe not.

It should never be more than two characters on either side; and
there's some benefit to using square or curly braces as one of them,
to hint at proper syntax within.  Hmm... how about:

    |[1, 2, 3]| # Set literal
    |[1=>true, 2=>true, 3=>true]| # technically possible; but why do it?
    |{1, 1, 2, 3}| # Bag literal
    |{1=>2, 2=>1, 3=>1}| # counted Bag literal

-- 
Jonathan "Dataweaver" Lang

Reply via email to