On 17 December 2012 07:28, Frank Shearar <frank.shearar@gmail.com> wrote:
On 16 December 2012 16:51, Stéphane Ducasse <stephane.ducasse@inria.fr> wrote:
Beware, Range exists in other languages (python, etc..). We should check if they correspond to a Smalltalk Interval or a mathematical Interval. If they correspond to a Smalltalk Interval, that will be one more un-necessary trap.
Note that we rarely use Interval, we just use #to: or #to:by:, so we could as well rename Interval->Range. And postpone creation of Mathematical Interval which is most likely unused in kernel image.
Why not? Now it would be good to move. but what I know is that igor wanted to have range intersection for the new text model. Another question: who thinks that ruby look at Smalltalk when they take a decision on their library? I do not think so. We can check what is around and **improve** our nice system
If you use Ruby for any length of time (and ignore most of the syntax) you will quickly realise that Ruby _is_ Smalltalk in many fundamental ways. It's just a pity Matz based its syntax on Perl (or so it seems). Ruby = Smalltalk with rubbish syntax and awesome integration with basic programmer tools and decent infrastructure.
I should add: with that last clause I'm not trying to dismiss Pharo's and Squeak's massive improvement in infrastructure. It's just that it's nowhere near as slick as in Ruby. frank
frank
Stef
2012/12/16 Stéphane Ducasse <stephane.ducasse@inria.fr>:
I agree so we should introduce Range. Did not you or camillo started to have Range? It can be a really nice class.
Stef On Dec 16, 2012, at 4:55 PM, Igor Stasenko wrote:
So, to my sense a behavior of Interval is overloaded.. it tries to be too many things at once: - be an interval in math sense (which is infinite set if used for Real numbers) - be a "collection" of numbers which you can enumerate (implies that it is finite).
to me, i would be much happier if we could have two different and non-intersecting entities:
- Enumeration. This one indeed can be used as a collection. i.e. "give me all integer numbers lying between values A and B, count each C-th number" Like that, (1 to: 1.5 by: 1) is enumeration which contains a single element. and #last should be = 1
- Interval (Range). A pure interval in math sense: defines a Set of numbers lying between numbers A and B, inclusive, where A <= B. Not enumerable, therefore no 'step' variable, instead what it could have, is flags to indicate whether interval endpoints included into interval or not.. i.e. (a,b) vs [a,b] vs [a,b) vs (a,b].
Not supporting enumeration (no #do: , no #add: no #at: etc). You can, however intersect, merge or diff two intervals etc.. same operations which you doing on sets (but that would require another entity - interval set). And of course, you can test whether some number lies within given interval or not.
The reason i started this topic is because some code were using 'range' for variables which holding intervals.. Now what you think is more appropriate protocol for something called 'range', this:
x := range first y := range last
or this:
x := range start y := range end
-- Best regards, Igor Stasenko.