>> It is blurred by design. There is an interpretation where an interval
>> between [0..4] equals to a set of intervals ([0..2],[2..4]).
> No, because 2.5 is in one and not the other. 
My notation was: 0..4 for any number between 0 and 4. And 2..4 for any
number between 2 and 4. So yes, 2.5 is in both of them.

> Floats are orderable with
> ints, so it's not reasonable to say "this is an int intervalset so no
> floats are contained in it". But that's another discussion.
I did not say such thing.
>
> But why would you want to use [0..4] directly instead of ([0..4])?
I did not say that I want to use it. I just said that ([0..2], [2..4])
and ([0..4]) contains exactly the same values, and I wanted to have a
single well defined representation.
>> Actually,
>> you can ask: "is an element within the interval?" The same question can
>> be asked for an Interval set. So the same type of value can be
>> "contained" within an interval and also witin an interval set. In the
>> current implementation, if you try to create a set with these two
>> intervals [0..2] and [2..4], then they are unified into a single element
>> on purpose: to make sure that there is only a single official
>> representation of it. E.g. ([0..2],[2..4]) is not a valid set, only
>> ([0..4]) is.
> Uh, exactly. I don't understand why any of this makes it useful to have
> these operations on interval objects.
It doesn't make it a problem. :-)
>
>> By definition, a set is given with its elements, e.g. for any possible
>> item, you can tell if it is part of the set or not. So if
>> ([0..2],[2..4]) and ([0..4]) have exactly the same elements (by the
>> given definition), then they are not just equal: they are the same set.
>> The same reasoning is used in math when they say: there cannot be
>> multiple empty sets. There exists a single empty set. It happens that we
>> can only represent a finite number of elements in any set on a computer.
>> I wanted to have a well defined single way to represent any given set.
> What? *I* am the one who wants a well defined single way to represent a
> given set. *You* are the one who wants to make [0..4] a set-like object
> that is different from ([0..4]) and doesn't quite support the same
> operations.
Are you suggesting, that iterating over a set should yield sets? Just
like iterating over a string yields single character strings? To make it
useful, we must be able to access the begin and end value of such
yielded sets.
>
>> I can also see your point. From another point a view, a set and a set of
>> sets is not the same type.
> I'm saying an interval is _not_ a set. It is merely part of the way of
> describing the set. Just like the word "of" isn't a set just because
> "the set of all even numbers" is a set.
>
> You could consider "the set of [dates|numbers|etc] in a single interval"
> to be a type of set, certainly. But there's no reason to have such a set
> _not_ fully support set operations even when those operations will not
> return a set of a single interval.
Okay, I hope I'm beginning to understand you. Analogy: the ord()
function has a string parameter but it must be of length 1. Simiarily,
when you iterate over a set, the yielded items will be sets with a
"begin" and "end" attribute, wich can only be used when the set has a
single element. Otherwise it should throw an error. The same way my
Interval type throws an error when you try to unify it with a non
overlapping interval. (???)
>
>> However, I do not share this view, because if
>> we start thinking this way, then operations like the one below does not
>> make sense:
>>
>> [0..4]) - (1..2] == [0..1] | [2..4]
>>
>> If you make a strinct distinction between intervals and interval sets,
>> then the above equation does not make sense, because you cannot remove
>> an element from a set that is not an "element" of it. The above equation
>> makes sense only if the "intervalset" is a general representation of
>> possible values, and the "interval" type is a special representation of
>> (the same) possible values.
> I don't understand why you want to let the user use the "interval" type
> for purposes other than adding to an intervalset in the first place
> Nothing you've posted has explained this.
For iteration over the set and accessing begin/end values, of course.
But then again: we could use simple tuples for that, right?

As far as I understand, you recommend to throw out the Interval type,
let the user use simple tuples in the IntervalSet constructor, and let
the iterator iterate over tuples. Right?



-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to