develooper Front page | perl.perl6.language | Postings from September 2009

Re: [perl #69194] rakudo 2009-08 and when with lists

Thread Previous | Thread Next
From:
David Green
Date:
September 19, 2009 18:45
Subject:
Re: [perl #69194] rakudo 2009-08 and when with lists
Message ID:
32F3F087-F84C-4AF4-89DE-535A804C83D8@telus.net
On 2009-Sep-19, at 5:53 am, Solomon Foster wrote:
> On Sat, Sep 19, 2009 at 6:48 AM, Carl Mäsak <cmasak@gmail.com> wrote:
>> David (>>>),
>>> It sounds like the split personality of Ranges strikes again.  I  
>>> still think
>>> it makes more sense to have one Series-only type and one Range- 
>>> only type,
>>> rather than one Series type and one Range-plus-Series type.
>>
>> If for no other reason than to contribute a contrasting viewpoint,  
>> I'm
>> not sure I see the problem in this case. A range is an object in Perl
>> 6, in a much more palpable way than in Perl 5. This might be what
>> causes the mental mismatch for Perl5-ers.

Well, I wonder if the journey from a P5 point of view is the  
historical reason why we ended up with Range+series ".." and Series  
"...".  Otherwise what's the rationale for having Range-:by separate  
from "..."?

>> As far as I can see, the range object already is of your proposed  
>> Range-plus-Series type,

But that's the problem; I'm proposing there shouldn't be a Range-plus- 
Series type, because it mixes two different concepts.  As a range it  
works one way (basically representing an ordered pair of endpoints),  
but if you use :by() it looks like a discrete list... even though  
really it still is "just" a Range object.

>> and when I apply list context to the range, I get your proposed  
>> Series-only type (which happens to be an ordinary list, but still).

I think a Range shouldn't turn into a list, at least not implicitly.   
Some ranges have an obvious coercion (e.g. "a".."c" becomes <a b c>),  
but some don't (e.g. 1..5, which should encompass all nums between 1  
and 5, not just the Ints.  Unless we distinguish Int(1)..Int(5) from  
Num(1)..Num(5), which only raises the potential for confusion).

> The one thing that worries me about this is how :by fits into it all.
> 	rakudo: given 1.5 { when 1..2 { say 'between one and two' }; say  
> 'not'; };
> 	rakudo: given 1.5 { when Range.new(from => 1, to => 2, by => 1/3) {
> makes me very leery.  I know :by isn't actually implemented yet, but  
> what should it do here when it is?

Exactly: 1.5 is "between" 1 and 2, but if you're counting by thirds,  
1.5 is not in the list(1..2 :by(1/3)).  Sure, we can stipulate that  
this is simply how the rules work, but people are still going to get  
confused.  On the other hand, we can get rid of the list/series/:by  
part of Ranges without losing any power (move that capability to ...  
instead), and cut down on the confusion.


-David


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