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: [email protected]
For additional commands, e-mail: [email protected]