Ranges

Jordan Harband ljharb at gmail.com
Fri Nov 4 17:24:51 UTC 2016


Here you go:

1) `function* range(start, end) { for (const i = +start; i < end; ++i) {
yield i; } }`
2) `function range(start, end) { return Array.from({ length: start - end },
(_, i) => start + i); }`

On Fri, Nov 4, 2016 at 7:42 AM, Michael J. Ryan <tracker1 at gmail.com> wrote:

> Your right... The more I think about it...
>
>     Number.range(from=0, to=Number. MAX_SAFE_INTEGER)
>
> Is probably best, as a signature, then using .map(...) If you want a
> string representation...
>
> For that matter, wouldn't mind seeing more of the array utility methods,
> like map, added to strings, iterating through each character, same as
> .split('').map, but that's another discussion.
>
> On Nov 4, 2016 3:11 AM, "Alexander Jones" <alex at weej.com> wrote:
>
> +1000
>
> Classic feature creep with basically zero application.
>
>
> On Thursday, 3 November 2016, Isiah Meadows <isiahmeadows at gmail.com>
> wrote:
>
>> Could we just *not* have a `String.range`?
>>
>> 1. Needing a list of alphabetically sorted characters is a bit niche,
>> even in the Latin alphabet.
>> 2. It's ambiguous whether it should include symbols or not. (think:
>> `String.range("A", "z")`)
>> 3. If it's Unicode-aware, how should it act with, say, `String.range("A",
>> "π")`?
>>
>> On Thu, Nov 3, 2016, 16:21 Viktor Kronvall <viktor.kronvall at gmail.com>
>> wrote:
>>
>>> Even more interestingly what would `String.range("","zzz")` produce.
>>> From what code point is the range started? Will this throw? Is the empty
>>> string included in the iterator?
>>> 2016年11月3日(木) 21:18 Viktor Kronvall <viktor.kronvall at gmail.com>:
>>>
>>>> Actually, after giving it some more thought for that case there is just
>>>> that one possibility that makes sense.
>>>>
>>>> However, there are more ambiguous cases such as `String.range("AAA",
>>>> "ZZZ")` (should all letters increase at once or should the rightmost letter
>>>> be incremented first)
>>>>
>>>> Also, how would range handle the arguments in inverted order? Should
>>>> there be a decreasing range or should it terminate with no elements in the
>>>> iterator?
>>>> 2016年11月3日(木) 21:05 kdex <kdex at kdex.de>:
>>>>
>>>>> About the code points: `String.range` should also handle surrogate
>>>>> pairs, similar to for..of does it.
>>>>> About `String.range("A", "zzz")`: Do any other possibilities even make
>>>>> sense?
>>>>>
>>>>> On Thursday, November 3, 2016 6:47:04 PM CET Viktor Kronvall wrote:
>>>>> > For `String.range` what would the expected result of
>>>>> > `String.range('A','zzz')` be?
>>>>> >
>>>>> > Is an exhaustive pattern expected?
>>>>> >
>>>>> > `['A','B','C',...'Z','a','b','c',...,'z','AA','AB',...]`
>>>>> > 2016年11月3日(木) 19:21 Michael J. Ryan <tracker1 at gmail.com>:
>>>>> >
>>>>> > > If there's a Number.range, if suggest a corresponding String.range
>>>>> for
>>>>> > > character ranges...  Agreed on it being a utility function over me
>>>>> syntax.
>>>>> > >
>>>>> > > On Nov 3, 2016 10:25 AM, "Isiah Meadows" <isiahmeadows at gmail.com>
>>>>> wrote:
>>>>> > >
>>>>> > > If string ranges are based on character codes, it will (for the
>>>>> Latin
>>>>> > > alphabet, at least, not necessarily for other languages).
>>>>> > >
>>>>> > > I would prefer a function over syntax, though, since it would be
>>>>> more
>>>>> > > easily adopted (polyfill > syntax), and it would fit more
>>>>> idiomatically
>>>>> > > with the rest of the language (which also uses functions for most
>>>>> > > utilities).
>>>>> > >
>>>>> > > Maybe a `Number.range` would work?
>>>>> > >
>>>>> > > ```js
>>>>> > > Number.range = function *range(start, end=undefined, step=1) {
>>>>> > >   if (end === undefined) [start, end] = [0, start];
>>>>> > >   if (end === undefined) end = Infinity;
>>>>> > >   for (let i = 0; i < end; i += step) {
>>>>> > >     yield i;
>>>>> > >   }
>>>>> > > };
>>>>> > > ```
>>>>> > >
>>>>> > > On Thu, Nov 3, 2016, 12:56 kdex <kdex at kdex.de> wrote:
>>>>> > >
>>>>> > > Agreed. There's no reason why `Array.range` or `[1..10]` couldn't
>>>>> just
>>>>> > > return a generator
>>>>> > > or at least something that extends a generator, though. I wonder
>>>>> if it's
>>>>> > > viable to implement
>>>>> > > something akin to `.length` on ranges, which could be natural
>>>>> numbers or
>>>>> > > `Infinity`.
>>>>> > >
>>>>> > > As for numbers, I don't see any issues. One issue that came up in
>>>>> the
>>>>> > > original thread was
>>>>> > > that string ranges may need a better definition, as ["A".."C"]
>>>>> might not
>>>>> > > necessarily transpile
>>>>> > > to be a generator that yields "A", "B" and "C".
>>>>> > >
>>>>> > > On Thursday, November 3, 2016 4:46:03 PM CET Isiah Meadows wrote:
>>>>> > > > I'll note, just for clarity, that Scala's `1 to 10` is
>>>>> technically just a
>>>>> > > > normal method call equivalent to `(1).to(10)`, with optional
>>>>> parentheses
>>>>> > > > removed.
>>>>> > > >
>>>>> > > > Also, I'd prefer this to be a generator instead, so infinite
>>>>> ranges are
>>>>> > > > also possible, and so it doesn't have to be eager.
>>>>> > > >
>>>>> > > > On Thu, Nov 3, 2016, 11:52 Hikaru Nakashima <
>>>>> oao.hikaru.oao at gmail.com>
>>>>> > > > wrote:
>>>>> > > >
>>>>> > > > > How about this
>>>>> > > > >
>>>>> > > > > ```
>>>>> > > > > for ( i of Array.range(1, 10) ) { ... }
>>>>> > > > > // OR
>>>>> > > > > for ( i of [1..10] )  { ... }
>>>>> > > > > ```
>>>>> > > > >
>>>>> > > > >
>>>>> > > > > _______________________________________________
>>>>> > > > > 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
>>>>> > >
>>>>> > >
>>>>> > > _______________________________________________
>>>>> > > 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
>>>>> > >
>>>>>
>>>>> _______________________________________________
>>>>> 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
>>>
>>
> _______________________________________________
> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20161104/a97adb41/attachment-0001.html>


More information about the es-discuss mailing list