Producto de Matrices Usando Referencias

Sigue el código e la función matrixProd:

lhp@europa:~/projects/perl/src/perltesting$  sed -ne '1,26p' matrixproduct.pl | cat -n
 1  #!/usr/bin/perl -w
 2  use strict;
 3  use List::Util qw(sum);
 4  use List::MoreUtils qw(any);
 5  use Scalar::Util qw{reftype};
 6
 7  sub matrixProd {
 8    my ($A, $B) = @_;
 9    die "Error. Se esperaban dos matrices" if any { !defined($_) or reftype($_) ne 'ARRAY' } ($A, $B, @$A, @$B);
10
11    my $nrA = @$A;
12    my $nrB = @$B;
13    my $ncB = @{$B->[0]};
14    my @C;
15
16    die ("Las matrices no son multiplicables\n") if any { @$_ != $nrB } @$A;
17
18    for(my $i = 0; $i < $nrA; $i++)  {
19      for(my $j = 0; $j < $ncB; $j++) {
20        my $k = 0;
21        $C[$i][$j] = sum(map { $A->[$i][$k++] * $_ } map { $_->[$k] } @$B);
22      }
23    }
24
25    return \@C;
26  }

Casiano Rodríguez León
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19