> Date: Tue, 11 Feb 2003 10:34:57 -0800
> From: Michael Lazzaro <[EMAIL PROTECTED]>
> 
> On Monday, February 10, 2003, at 05:56  PM, Luke Palmer wrote:
> > Indeed, this supports the distinction, which I will reiterate:
> >
> >     - Arrays are variables.
> >     - Lists are values.
> 
> My hesitation about the 'arrays are variables' part is that Damian 
> corrected me on a similar thing when I was writing about scalars.  A 
> variable is more like "a name of a container for a value", e.g. there's 
> three parts to it:
> 
>     - the name      (what it's called in the namespace)
>     - the container (a specific container implementation)
>     - the value     (what's inside it)
> 
> So I don't know that arrays are variables, so much as arrays are 
> containers, if we want to get pedantic about it (which I don't, but... 
> documentation... sigh).

Well, that doesn't assume the definition of the variable includes a
namespace entry.  So, yes, I suppose container would be better.  The
thing the namespace entry points to, but not the value.

> Just to clarify... in P6, is this an array reference, or a list 
> reference?
> 
>       [1,2,3]
>
> What about this?
> 
>       \@array
> 
> I'd say both of them are array references, but there's no variable 
> associated with the first one 

I'd agree.

> -- it's just an anonymous container.  So I'd rewrite the definition
> to:
> 
>    - Lists are an ordered collection of scalar values
>    - Arrays are containers that store lists

I think that's a pretty good one.

> (Coupled with Uri's explanations, of course... it's the 'container' 
> part that allows read/write, as opposed to simply read.)  Yes/no?

Yes, from my perspective, the container is the one that knows
read/write.  Basically, the only you can't modify lists is that they
have no operations defined that can modify them.  Arrays on the other
hand, do.

> 
> > Arrays are things that know about lists.  They know how to get a
> > particular element out of a list. They know how to *flatten
> > themselves, interpolating themselves into the surrounding list.  They
> > know how to map, grep, sort, splice themselves.  They know how to turn
> > themselves into a scalar.  Lists don't know how to do these things.
> 
> But is it OK for a list to be silently promoted to an array when used 
> as an array?  So that all of the following would work, and not just 50% 
> of them?
> 
>     (1..10).map {...}
>     [1..10].map {...}

I don't really know here.  I'm not sure whether this should work....
I think if lists don't have the C<map> method, that shouldn't work.

>     (@a,@b,@c).pop
>     [@a,@b,@c].pop

Why would you suppose the former to work?  Or do you mean that to mean
(@a.pop,@b.pop,@c.pop)?  Can lists have methods?

This clear distinction that I once had in my mind is getting blurrier
and blurrier.  :(

Luke

Reply via email to