Hi, Bruno; my thoughts inline...

On Sun, Jan 22, 2012 at 6:15 PM, Bruno P. Kinoshita
<brunodepau...@yahoo.com.br> wrote:
> 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 think we might do better to handle both tasks by designing a generic
Range builder API, and removing the existing Range classes.  This way
either type of bounding could be requested by the user at his
convenience.

>
> 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/

Thanks for the publicity (though technically the [functor] component
is Apache *Commons* 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.

Hmm... *which* result is always false?  :/

> 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 :)

I'm not sure we're thinking the exact same thing here, but I do like
the idea of moving the stop behavior to a custom Generator wrapper
class.  Anything we can do to simplify the Generator API is at least
up for discussion.  It's probably one of the least-understood APIs, in
all honesty--you must remember that the original developers have long
since disappeared from the Commons community.  If you come across any
good FP resources showing you the precedent for [functor]'s generator
APIs I'd be glad for more information.

Thanks for your ongoing interest,
Matt

>
> 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
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to