Re: New variable type: matrix

[email protected] (Buddha Buck)
Newsgroups perl.perl6.language.data
Message-ID <20000826203541.5DF8D156DA@zaphod>
> Not being a PDL'er myself, but interested in learning more about it and
> making sure Perl 6 doesn't suck, I'd love to see a bulleted list of what
> doesn't work right, even assuming that @arrays were made more flexible.
> For example, if you could do this:
> 
>    @c = @a * @b;
>    @c = @a + @b;
>    @c = (@a - @b) * (@d / @e);
> 
> What other specific problems remain? TIA.

I'm not a PDL'er myself, either.  But I haven't noticed a syntax 
suggested for multidimensional arrays that looks good to me yet.

How are they indexed?  $matrix[$x][$y][$z] is (too me) too C'ish, and 
implies that @matrix is implemented as an array of arrays of arrays, 
instead of some more efficient, compact structure.  $matrix[$x,$y,$z] 
already has a reasonable meaning.  If we appropriate that syntax, how 
do you take slices of a matrix?

I'm thinking I like using ; as an index separator, as in 
$matrix[$x;$y;$z].  This -shouldn't- be a massive problem for parsing; 
we are already using ; in "for(;;)" as something other than a statement 
separator.

This would also allow us to do slices like: @matrix[1,3,5;2,4,6;3] to 
get a 3x3x1 resulting matrix consisting of $matrix[1;2;3],$matrix[1;4;3]
, etc.

How are literal multidimensional arrays written?  For this, I'm not 
sure...  My first thought was to separate the rows with ;, as in 
@matrix = ( 1,2;3,4).  But that doesn't scale well to more than 2d.  
Then I thought just using the standard list of list syntax:  @matrix = 
( [1,2],[3,4] ).  But is that a list of array references, or a 2-d 
array?  Next, I thought of combining the two:

@matrix3x3x3 = ( [[ 1, 2, 3];
                  [ 4, 5, 6];
                  [ 7, 8, 9]];   # row 0;
                 [[10,11,12];  
                  [13,14,15];
                  [16,17,18]];   # row 1;
                 [[19,20,21];
                  [22,23,24];
                  [25,26,27]] ); # row 2;

I think parenthesis might be better, using [] for reference 
constructors, but any way you look at it.

Should explicit bounds and declarations take place before use?  Is "my 
@matrix:bounds(3,3,3);" necessary?  I don't know about you, but 
autovivication of array elements and boundlessness is a feature I like 
about perl.  Why should "$array[1000] = $x" work without predeclaration 
but "$matrix[1000;1000;1000] = $x" shouldn't?

Just my thoughts?


 
> 
> -Nate

-- 
     Buddha Buck                             [email protected]
"Just as the strength of the Internet is chaos, so the strength of our
liberty depends upon the chaos and cacophony of the unfettered speech
the First Amendment protects."  -- A.L.A. v. U.S. Dept. of Justice
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.