On Fri, Jul 16, 2010 at 9:40 PM, Michael Zedeler mich...@zedeler.dk wrote:
What started it all, was the intention to extend the operator, making it
possible to evaluate it in list context. Doing so has opened pandoras box,
because many (most? all?) solutions are inconsistent with the rule of least
surprise.
I don't think there's any coherent expectation, and therefore no potential
to avoid surprise. Returning comic books might be more of a surprise, but as
long as you're returning a string which appears to be in the range
expressed, then I don't see surprise as the problem.
For instance, when considering strings, writing up an expression like
'goat' ~~ 'cow' .. 'zebra'
This makes sense in most cases, because goat is lexicographically between
cow and zebra.
This presumes that we're treating a string as a number in base x (where x,
I guess would be the number of code points which share ... what, any of the
general category properties of the components of the input strings?
That begins to get horrendously messy very, very fast:
say 1aB .. aB1
I'd suggest that if you want to evaluate a Range in list context, you may
have to provide a hint to the Range generator, telling it how to generate
subsequent values. Your suggestion that the expansion of 'Ab' .. 'Be'
should yield Ab Ac Ad Ae Bb Bc Bd Be is just an example of a different
generator (you could call it a different implementation of ++ on Str types).
It does look useful, but by realizing that it probably is, we have two
candidates for how Ranges should evaluate in list context.
I think the solution here is to evaluate what's practical in the general
case. Your examples are, I think misleading because they involve English
words and we naturally leap to sure, that one's in the dictionary between
the other two. However, let me pose this dictionary lookup for you:
cliché ~~ aphorism .. truth
Now, you see where this is going? What happens when we throw in some
punctuation?
father-in-law ~~ dad .. stranger
The problem is that you have a complex heuristic in mind for determining
membership, and a very simple operator for expressing the set. Worse, I
haven't even gotten into dealing with Unicode where it's entirely reasonable
to write TOPIXコンポジット1500構成銘柄 which I shamelessly grabbed from a Tokyo
Stock Exchange page. That one string, used in everyday text, contains Latin
letters, Hiragana, Katakana, Han or Kanji idiograms and Latin digits.
Meanwhile, back to .. ... the range operator. The most useful application
that I can think of for strings of length 1 is for generating unique
strings such as for mktemp.
Beyond that, its application is actually quite limited, because the rules
for any other sort of string that might make sense to a human are absurdly
complex.
As such, I think it suffices to say that, for the most part, .. makes
sense for single-character strings, and to expand from there, rather than
trying to introduce anything more complex.
--
Aaron Sherman
Email or GTalk: a...@ajs.com
http://www.ajs.com/~ajs