> So from this viewpoint (and regarding that example with squares), it's good 
> to have also `Array.seq(from, to)` method (the name is taken from Erlang, I 
> just frequently uses lists:seq(from, to) there):

<bikeshed>Array.range seems like an intuitive name as well.</bikeshed>

> Array.seq(1, 5).map((x) -> x * x); [1, 4, 9, 16, 25]

This pattern (integer range immediately followed by map) is so common that many 
Schemes have a more general function that fuses the two traversals, sometimes 
called build-list or list-tabulate:

    Array.build(n, f) ~~~ [f(0), ..., f(n-1)]

Another common and useful fusion of two traversals that's in many Schemes is 
map-filter or filter-map:

    a.filterMap(f) ~~~ [res for [i,x] of items(a) let (res = f(x, i)) if (res 
!== void 0)]

I rather arbitrarily chose to accept both null and undefined here as way to say 
"no element" -- a reasonable alternative would be to accept *only* undefined as 
"no element".

Dave

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to