Le 02/01/2014 01:44, bearophile a écrit :
Raphaël Jakse:

        auto E = new Set!int([1,2,3,4]); // it is possible to declare
an empty set

You can add a factory helper:
auto e = set([1, 2, 3, 4]);

Or even:
auto e = set(1, 2, 3, 4);

I'm going to add this.
Two questions:
 - By default, should set be typed or untyped?
   I would go for typed set, but what about people's expectations?
- What is preferable: first version or second version of the proposed set factory function? (imho both cannot co-exist because of sets of arrays handling) * The first version allows creation of a set from a array. That is already possible with the constructor, but then you have to pass the type template, this is not beautiful. * The second version is more pretty. But then, we'll need a setFromArray function which makes a set from a list. I prefer the second option, but then, set([1, 2, 3, 4]) would make a set containing on element: an array of four ints. Could this be misleading?





        writeln("union: ", E.Union(F));
        writeln("inter: ", E.Inter(F));
        writeln("symmetric difference: ", E.SymDiff(F));
        writeln("minus: ", E.Minus(F));
        writeln("Powerset: ", E.Powerset);

In idiomatic D all the member functions start with a lowercase letter.

I prefer lowercase for first letters too, but there is the "union" member, which is a keyword, so I put them all in uppercase.

Any idea?


And a little operator overloading helps, look at the Python set() for a
nice API.


            // beware, because S is an untyped set (Set!() or
Set!Object),

Probably in idiomatic D you use templates, so Set!Object is a very
uncommon usage, unlike Java.

What do you mean?


about Set!Object:

I needed a means to specify the type of elements in the Set. So I went with Set!the_type. Then, I needed a special type to make sets able to hold any value. I went for Object. void might have been nice, though it would probably have complicated things.

I tried to make `auto S = new Set;` create a untyped set, but I didn't succeed.

So again, what do you suggest?



Should Phobos have something similar built in?

A set is a good thing to have in Phobos, but the API and design should
be a little different from yours.

I'm eager to make my library close to "idiomatic D", so feel free to make any remark, suggestion for this or for anything else.


Bye,
bearophile

Reply via email to