Larry's updating the Synopsis terminology to say "sequence" instead of "series"
for correctness led me to check out what seems to be a similar problem, "range".
I believe that the Synopsis should just use the term "interval" for what it
currently calls "range" (and "Interval" for "Range"); currently it uses both
terms and Perl 6 has related types named "Range" and "RangeIter".
The problem stems from "range" having multiple relevant meanings in practice:
1. A "where" or "region" kind of meaning, where it is used in the same way as
"interval", as being a collection of everything between 2 locations/points.
2. A "how much" or "distance" kind of meaning, where it is the (scalar)
distance between 2 locations/points.
The relationship between these is like a generalization of the relationship
between a temporal interval (with 2 temporal instant endpoints) and a temporal
There is also a third meaning of "range" meaning the set of possible output
values of a function, corresponding to "domain" as the set of possible inputs.
I believe that the name Interval is much more specific to the meaning that Range
is going for, without having the other meanings that can confuse, while Range is
more likely to confuse.
In particular, what would someone expect a function named range() to do?
It is often the case that range() would be expected take a nonempty set of
numbers and return a number that is the difference between the largest and
smallest numbers in the set. For example, "range(5,-3,0,6,2,-1)" would return 9
(6-(-3)); similarly, "range(25..52)" would return 27.
A range() function would be in the same category of functions as mean(),
median(), mode(); each takes a nonempty set of numbers and returns a single number.
Now if Range were renamed to Interval, I don't see this as being a problem for
anyone. Sure, Interval is a longer word, but how often would the name of that
type be written out in code? Usually one produces an interval using ".."/etc
As for places you want to abbreviate, I recommend "Ivl" ("Int" won't work,
obviously); it looks visually different and emphasizes distinct sounds. For
example, with "IvlIter"; granted, this doesn't read as well as "RangeIter", but
would either appear in code that often anyway and not be more of an internal
thing that's used implicitly?
So then, just use "interval" etc for that meaning and just use "range" for other
meanings such as high-low distance or the output of a function, or just use it less.
The main wrinkle I can see here is if you were deliberately using "range"
*because* it has multiple meanings, to try and convey all of those meanings at
once. While that may work in some cases, it seems *too* clever in this case.
And if you want to say that, eg, casting a Range object as an integer returns
the difference between its endpoints (meaning #2), Interval works for that too.
-- Darren Duncan