Buddha Buck wrote:
> At 12:00 AM 9/12/00 +1100, Jeremy Howard wrote:
>  >[EMAIL PROTECTED] wrote:
>  >> Reading through the examples left me wondering about some
>  >> technicalities:
>  >>
>  >> >   @t[|i;|j] = @a[|j;|i];  # transpose 2-d @a
>  >>
>  >> Written like this it would require that @a is exact 2-dim, i.e. it
would
>  >> not just swap the first two dims of any n-dim array? I suppose if I'd
>  >> want that I'd write
>  >>
>  >>     @t[|i;|j;] = @a[|j;|i;]; # trailing ';' implies there might be
>  >> trailing dims
>  >>
>  >Not necessary. Since arrays support all the syntax of a plain old list
of
>  >lists, and the |i syntax just creates an implicit loop, the example
quoted
>  >from the RFC will work with other sized arrays. In fact, if it was only
2d,
>  >it would more properly be:
>  >
>  >  $t[|i;|j] = $a[|j;|i];  # transpose 2-d @a
>
<...>
>
> While something like "$t[|i;|j] = $a[|j;|i];" looks clearly like
> scalar-to-scaler assignment of 2-D array elements, something like "@p =
> $a[$k;|i]*$b[|i;$k];" isn't so clear.  Multiply two scalers to get an
> array?!?  In truth, it's assigning an array to an array, so there is no
> problem except appearances.
>
I don't think:

  @p = $a[$k;|i]*$b[|i;$k];

is meaningful. I would have thought that the iterator indexes must appear on
_both_ sides of an expression:

  $p[|i] = $a[$k;|i]*$b[|i;$k];

unless using a reduction:

  $sum = reduce ^_ + ^_, $a[$k;|i]*$b[|i;$k];

That way it is easy to conceptualise the implicit loop that is being
created. However, there is an issue with the width of the implicit loop. In
the above expression I want reduce() to be sent the array of values
$a[$k;|i]*$b[|i;$k]. However, in:

  $sum[|i] = reduce ^_ + ^_, $a[$k;|i]*$b[|i;$k];

I want reduce to be sent the list at each iteration of $a[$k;|i]*$b[|i;$k],
where @a and @b and both 3d arrays.

I have no idea how to do this...


Reply via email to