develooper Front page | perl.perl6.language | Postings from July 2010

Re: Suggested magic for "a" .. "b"

Thread Previous | Thread Next
From:
Michael Zedeler
Date:
July 28, 2010 17:07
Subject:
Re: Suggested magic for "a" .. "b"
Message ID:
4C50C641.7000605@zedeler.dk
On 2010-07-29 01:39, Jon Lang wrote:
> Aaron Sherman wrote:
>
>>> In smart-match context, "a".."b" includes "aardvark".
>>>
>> No one has yet explained to me why that makes sense. The continued use of
>> ASCII examples, of course, doesn't help. Does "a" .. "b" include "æther"?
>> This is where Germans and Swedes, for example, don't agree, but they're all
>> using the same Latin code blocks.
>>
> This is definitely something for the Unicode crowd to look into.  But
> whatever solution you come up with, please make it compatible with the
> notion that "aardvark".."apple" can be used to match any word in the
> dictionary that comes between those two words.

The key issue here is whethere there is a well defined and meaningful 
ordering of the characters in question. We keep discussing the nice 
examples, but how about "apple" .. "ส้ม"?

I don't know enough about Unicode to suggest how to solve this. All I 
can say is that my example above should never return a valid Range 
object unless there is a way I can specify my own ordering and I use it.

>> I've never accepted that the range between two strings of identical length
>> should include strings of another length. That seems maximally non-intuitive
>> (well, I suppose you could always return the last 100 words of Hamlet as an
>> iterable IO object if you really wanted to confuse people), and makes string
>> and integer ranges far too divergent.
>>
> This is why I dislike the notion of the range operator being used to
> produce lists: the question of what values you'd get by iterating from
> one string value to another is _very_ different from the question of
> what string values qualify as being between the two.  The more you use
> infix:<..>  to produce lists, the more likely you are to conflate lists
> with ranges.

I second the above. Ranges are all about comparing things. $x ~~ $a .. 
$b means "is $x between $a and $b?". The only broadly accepted 
comparison of strings is lexicographical comparison. To illustrate the 
point: wouldn't you find it odd if 2.01 wasn't in between 1.1 and 2.1? 
Really?

Regards,

Michael.


Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About