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

Reply via email to