Hi all, In functor, there are two ranges available: IntegerRange and LongRange. Both use a closed open interval, i.e., the low limit is included in the range, while the high limit is not.
In Perl, we can create a range of numbers too, using the range operator (..). Something like 0..10. What produces a closed interval (both 0 and 10 are included). And in Perl, we can create a range of chars too. Like an alphabet, a..z. Again, a closed interval. With the current implementation of Ranges in functor, if I want a closed interval from 0 to 10, I have to create the following code (limited by 0 and 11), that produces a closed/open interval. IntegerRange range = newIntegerRange(0, 11); Now, if I create a CharacterRange, the implementation would have to use a closed interval (otherwise z would never be included). CharacterRange range = newCharacterRange('a', 'z'); IMHO, we could change the current implementation, before the first release, to use a closed interval. It means that it would always include the low and high limits. This way, both an IntegerRange and a CharacterRange, would have the same behavior, respecting the Liskov Principle of Substitution. What do you think? If that sounds reasonable, I could file an issue for the change of behavior in JIRA, and another JIRA with an CharacterRange plus tests, and an example for the web site. Another thing, I have to use float intervals for fuzzy membership functions in a project. As I am already using functor there, I thought I could create a FloatRange and a DoubleRange for functor. What do you think? If this sounds good too, I will file an issue in JIRA for this too, with tests and examples for the web site. I wrote a blog entry to organize my findings while I compared functor ranges with other API's and programming languages, maybe someone will find it interesting - http://www.kinoshita.eti.br/2012/01/22/ranges-in-apache-functor/ There are other points in Integer and Long ranges that I found confusing. Like, if you call isStopped() before, during the iteration or after you iterated over the elements, the result is always false. Not sure if this is the right behavior for it. Perhaps this method could be moved from Generator to a StoppableGenerator interface, that WhileGenerator, GenerateUntil and others would implement (maybe even the IntegerRange, or a StoppableIntegerRange. Try creating a IntegerRange from 0 to Integer.MAX_VALUE and print the values with a UnaryProcedure... that may take some time :) Thank you in advance! Bruno P. Kinoshita http://kinoshita.eti.br http://tupilabs.com --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org