Array extras functionality for iterators

Xavier MONTILLET xavierm02.net at gmail.com
Sat Feb 4 13:51:27 PST 2012


I'd say every and other methods like that should take another argument
that specifies the number if times to test.

You could say that every returns:
- true if the generator is finite and the function always returned true
- false if one of the finite (either because the generator is or
because a number was given as argument) number of calls of the
function returned false
- undefined if the generator is infinite and none of the finite number
of calls returned false

OR

return a generator that tests a new value and returns either true or
false every time it is called
on the nth call, it tests n values




map and filter clearly would be very useful. I'm not sure about the others.

On Sat, Feb 4, 2012 at 10:06 PM, Michael A. Smith <michael at smith-li.com> wrote:
> Sorry for the resend. Meant to include the list.
>
> I like this idea a lot! However, what would be the correct behavior of
> a method like 'every' on an infinite generator?
>
> -Michael A. Smith
>
>
>
> On Fri, Feb 3, 2012 at 3:54 PM, Domenic Denicola
> <domenic at domenicdenicola.com> wrote:
>> ES5's existing array extras make working with arrays a joy.
>>
>> However, sometimes arrays are not the right tool for the job. Perhaps you want lazy evaluation semantics (generators). Or perhaps you want to communicate that the list is immutable (compare .NET's `IEnumerable<T>` or Java's `Iterable<T>`). ES Harmony seems to have the answer: iterators! Like `IEnumerable<T>` or `Iterable<T>`, they are the most basic primitive of iteration. Yay!
>>
>> But, if my `fetchAllProducts()` method returns an iterator, I don't get my array extras. Sad.
>>
>> ---
>>
>> This may be solvable in library-space, but the iterator proposal doesn't seem to have an Iterator.prototype I could extend. So we end up with unfortunate underscore-style wrappers:
>>
>> _(iterator).chain().map(mapper).some(predicate).value()
>> _.some(_.map(iterator, mapper), predicate)
>>
>> I propose adding the array extras to any iterator (in some way), such that we can have syntax similar to the following:
>>
>> iterator.map(mapper).some(predicate) // returns an iterator
>>
>> The methods I would like to see are:
>> * every, filter, forEach, map, reduce, reduceRight, some
>> * Optionally: join, toString
>> * Controversially: sorted, reversed (non-mutating versions of sort and reverse)
>>
>> What do you think?
>>
>> -Domenic
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss


More information about the es-discuss mailing list