I've sifted through the archives in commons-dev from ~2002 and found some 
threads that can be useful regarding the Generators API. I will read it again 
later to see what I can come up with :) Below are the links and with a short 
description of each one. 

---
Proposal of generators in functor (with attachment)

http://markmail.org/message/rtnn2xpudw3ygtvr

New thread on the same topic

http://markmail.org/message/xainvc6dztvozm63

More on Generator and some discussion on the stoppable behavior, as well as 
some Java code

http://markmail.org/message/v6jzq436awjmdmth

A message explaining why EachElement wouldn't implement Generator anymore.

http://markmail.org/message/njupdn2i42jit6or

Set of links to other APIs with functors and other reference/resources, 
probably used while writing the initial code.

http://markmail.org/message/kf7sxy3otspkcesv#query:+page:1+mid:yiysmyaeua6ne4od+state:results

---
Hope that helps.


Bruno P. Kinoshita
http://kinoshita.eti.br
http://tupilabs.com


----- Mensagem original -----
> De: Matt Benson <gudnabr...@gmail.com>
> Para: Bruno P. Kinoshita <brunodepau...@yahoo.com.br>; dev@commons.apache.org
> Cc: 
> Enviadas: Terça-feira, 24 de Janeiro de 2012 16:58
> Assunto: Re: [functor] CharacterRange, FloatRange, DoubleRange and 
> open/closed intervals
> 
> On Tue, Jan 24, 2012 at 12:37 PM, Bruno P. Kinoshita
> <brunodepau...@yahoo.com.br> wrote:
>>  Hi Matt,
>> 
>>>  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.
>> 
>>  Great idea Matt. Should we file an issue in JIRA for this?
> 
> That would be fine with me; however see my later comments on Ranges
> wrt [functor].
> 
>> 
>>>  Thanks for the publicity (though technically the [functor] component
>>>  is Apache *Commons* functor ;) )!
>> 
>>  Thanks! Updated. :)
>> 
>>>  Hmm... *which* result is always false?  :/
>> 
>>  Sorry, I didn't make myself clear here. And actually, the issue is not 
> that the result is always false, but that IntegerRange .isStopped() and 
> .stop() 
> methods are defined in the parent class, BaseGenerator. This way, the 
> following 
> code keeps executing, even after you have called stop() method.
>> 
>>  IntegerRange range = new IntegerRange(0,  11);
>>  for(Integer value : range.toCollection()) {
>>      range.stop();
>>      System.out.println(value);
>>  }
> 
> Hmm... yes, this doesn't use the Generator API as intended.  Calling
> toCollection() runs the entire generator.  In this case, however,
> IntegerRange and LongRange are broken in that they never consult
> #isStopped() anyway.  I am thinking that we may need to redesign the
> entire Generator API, or scrap it entirely if we can't make it make
> proper sense.
> 
>> 
>>  However, I believe we should follow your suggestion and work designing a 
> generic Range builder API. Furthermore, Commons Lang3 has some classes for 
> ranges in the trunk too (not sure if all of them were released in 3.1).
>> 
>>  org.apache.commons.lang3.Range
>>  org.apache.commons.lang3.CharRange
>> 
>>  If I understood correctly, the CharSet will depend on Range to generate 
> CharRange's (see LANG-689 and LANG-670), and the CharRange has a 
> CharIterator. Looks like maybe we could create Ranges in commons-lang for 
> Integer, Long, Float and Double, and remove LongRange and IntegerRange from 
> functor. Just food for thought :)
> 
> IMO the difference between [lang]'s and [functor]'s range concepts is
> that those in [lang] are intended to be able to say whether a given
> value is in the Range, but, with the exception of CharRange (this
> class is not even public), they make no provision for iterating over
> members of the range.  I would therefore design a [functor]-targeted
> Range builder API to allow the user to specify how next values are
> obtained.  Range may not even be the best word to describe the
> behavior we are trying to model here, so let's be open to
> reinterpretation as we proceed.
> 
>> 
>>>  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.
> 
> Supporting stop behavior without having it live in the basic Generator
> interface is one reason I suspect it may be necessary to redesign the
> Generator API from the ground up.  I still think this sounds like the
> right approach, however.
> 
>> 
>>  I will look for FP resources to see if there is anything that could give us 
> more understanding on the Generator API.
> 
> I will do the same.
> 
> Regards,
> Matt
> 
>>  This could be useful as documentation in the project website too.
>> 
>>>  Thanks for your ongoing interest,
>>>  Matt
>> 
>>  Thank you Matt!
>> 
>>  All the best,
>> 
>>  Bruno P. Kinoshita
>>  http://kinoshita.eti.br
>>  http://tupilabs.com
>> 
>> 
>>  ----- Mensagem original -----
>>>  De: Matt Benson <gudnabr...@gmail.com>
>>>  Para: Commons Developers List <dev@commons.apache.org>; Bruno P. 
> Kinoshita <brunodepau...@yahoo.com.br>
>>>  Cc:
>>>  Enviadas: Segunda-feira, 23 de Janeiro de 2012 14:21
>>>  Assunto: Re: [functor] CharacterRange, FloatRange, DoubleRange and 
> open/closed intervals
>>> 
>>>  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
>

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

Reply via email to